2

カスタムGoogle検索エンジンでChromeブラウザのホームページを上書きするこのGoogle Chrome拡張機能を構築しています。

このカスタム Google 検索エンジンは、ユーザーが入力したクエリから結果を返すと想定しています。これをテストするために、最初にこのカスタム検索エンジンの html バージョンをビルドすると、うまく動作します。以下はスクリーンショットです:

ここに画像の説明を入力

しかし、Chrome拡張機能として作成しようとすると、検索結果が返されずに失敗します。

ここに私の main.html があります:

<HTML>
<HEAD>
<script type="text/javascript" src="jquery-1.9.1.js"></script>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script src="search.js" type="text/javascript"></script>
<TITLE>Search or Share</TITLE>
<link rel="stylesheet" type="text/css" href="main.css" />
</HEAD>
<BODY>

<center>


<div id="page-wrap">
<div style="height:30px"></div>

<center>
    <div id="logo"><img src="logo.png" /></div>
    <input type="text" title="Real Time Search" id="searchbox" name="searchbox"/>
</center>
<br/><br/>
<div id="search-content">   
    <div class="content" style="width:600px; display:inline">
        <div class="header">Web</div>
        <div class="data" id="web-content"></div>
    </div>
</div>

</div>
</center>
<div id="footer">
Copyright &copy; 2013
</div>
</BODY>
<SCRIPT src="main.js"></SCRIPT>

</HTML>

ここに私のmanifest.jsonがあります:

{
  "name": "Search or Share",
  "version": "0.2",
  "incognito": "split",
   "background": { 
    "scripts": ["jquery-1.9.1.js","search.js","main.js"] 
  },
  "permissions": [
    "http://www.google.com/*"
  ],
  "chrome_url_overrides": {
    "newtab": "main.html"
  },
  "manifest_version": 2
}

ここに私のsearch.jsがあります:

google.load('search','1'); 

そして、この最後のものは私の main.js ファイルです:

// Define variables
var webSearch;
var lastSearch = 0;

//Init function
$(function () { 
    webSearch = new google.search.WebSearch();
    webSearch.setSearchCompleteCallback(this, webSearchComplete, [webSearch, lastSearch]);

    $('#searchbox').focus();
});

// Begin search on keyup (realtime)
$('#searchbox').keyup(function () {
    var query = $(this).val();
    search(query);
});

// Search for the query 
function search(query) {
    if (query.length > 0) {
        $("#search-content").show();
    } else {
        $("#search-content").hide();
    }
    webSearch.execute(query);
}


function webSearchComplete(searcher, searchNum) {
    var contentDiv = document.getElementById('web-content');
    contentDiv.innerHTML = '';
    var results = searcher.results;
    var newResultsDiv = document.createElement('div');
    newResultsDiv.id = 'web-content';
    for (var i = 0; i < results.length; i++) {
        var result = results[i];
        var resultHTML = '<div style="height:70px; margin-top:5px;">';
        resultHTML += '<a href="' + result.unescapedUrl + '" target="_blank"><b>' + result.titleNoFormatting + '</b></a><br/>' + result.content + '<div/>';
        newResultsDiv.innerHTML += resultHTML;
    }
    contentDiv.appendChild(newResultsDiv);
}

※jsapi.jsスクリプトも作ったのですが、長すぎるので載せません。

なぜこうなった?クロムがホームページで外部サーバーとのやり取りを許可しないためですか、それとも何ですか? ありがとう!

4

1 に答える 1

1

@Rob W のおかげで、私の問題は解決しました。このことを正しく機能させるには、2 つのことを行う必要があるようです。

まず、jsapi を https プロトコルにリンクする必要があります。

<script type="text/javascript" src="https://www.google.com/jsapi"></script>

次に、manifest.json ファイルを編集して、https プロトコルを使用して google.com からのすべての検索リンクに許可を与え、content_security_policy を指定する必要があります。

  "permissions": [ "https://*.google.com/*"],
  "content_security_policy": "script-src 'self' https://www.google.com; object-src 'self'",
于 2013-06-29T13:40:19.463 に答える