0

編集: プロジェクトをクロム拡張としてロードしているときに、この問題が発生しました。これはChrome拡張機能固有の問題である可能性があると思います。

Google のカスタマイズされた検索エンジンで検索しようとすると、結果ページが表示されますが、空白です。調べると、次のエラーが表示されます。

スクリプト ' http://clients1.google.com/complete/search?client=partner&hl=en&sugexp=gsno …208%3Avdsj6wr1edq&types=t&ds=cse&cp=1&gs_id=4&q=m&callback=google.sbox.p50' のロードを拒否しました。次のコンテンツ セキュリティ ポリシー ディレクティブに違反しています: "script-src 'self' 'unsafe-eval' https://*.google.com"。

これは、スクリプトが「http」を使用しているためだと思います。Google のコンテンツ セキュリティ ポリシーに基づく「http」オリジンは受け入れられません

中間者攻撃は些細なものであり、HTTP では検出できないため、これらの発信元は受け入れられません。- https://developer.chrome.com/extensions/contentSecurityPolicy#relaxing

私のhtml:

<html>
    <head>
        <script src="fact.js"></script>
    </head>
    <body>
        <div id="gcse-search-bar">
            <gcse:search defaultToImageSearch="true"></gcse:search>
        </div>  
    </body>
</html>

私のjsファイル。私の場合、それは call fact.js です

document.addEventListener('DOMContentLoaded', function() {
    (function() {
    var cx = '016674471602576918208:vdsj6wr1edq';
    var gcse = document.createElement('script');
    gcse.type = 'text/javascript';
    gcse.async = true;
    gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(gcse, s);
  })();
});

私のmanifest.json:

{
  "manifest_version": 2,

  "name": "my extension",
  "content_security_policy": "script-src 'self' 'unsafe-eval' https://*.google.com; object-src 'self'",
  "description": "my extension",
  "version": "1.0",

  "browser_action": {
    "default_icon": "my.png",
    "default_popup": "my.html"
  },
  "permissions": [
    "activeTab",
    "http://*/*", 
    "https://*/*", 
    "https://En.wikipedia.org/*",
    "http://*.google.com/"
  ],
  "content_scripts": [{
       "js": ["fact.js"],
       "matches": ["http://*/*", "https://*/*"]
  }]
}

HTTP ではなく HTTPS を使用して結果を返すにはどうすればよいですか?

4

1 に答える 1

0

私の問題を解決する方法を見つけるために、GCSE関連のドキュメントをまだ調査/読んでいます。ただし、それまでの間、Google カスタム検索にリクエストを送信する別の方法を提供したいと考えています。

基本的な考え方は、Google Custom Search API で Google Custom Search Engine を使用することです。以下は手順/詳細です(私の質問に投稿したのと同じ問題が発生した場合は、すでにカスタム検索エンジンを作成し、エンジン ID を として取得している必要がありますが、念cxのため作成方法の指示を含めます。ステップにスキップすでに行っている場合は 5)

  1. アカウントを取得してカスタム検索エンジンを定義する
  2. 「検索エンジンの編集」の下にある「設定」をクリックします。
  3. 検索エンジンに画像検索をさせたい場合は、「画像検索」をオンにしてください
  4. [コードを取得] をクリックすると、次のcxように個人のエンジン ID が表示されます。

    var cx = 'MY_ENGINE_ID';

  5. エンジン ID を取得したら、Google カスタム検索 API を作成します(300.00 ドルのクレジットと 365 日間の無料試用版を取得します)

  6. 登録手順を実行します。完了すると、ホーム画面が表示されます

  7. API カードの下にある [Go to APIs Overview] をクリックします。
  8. 次に「APIを有効にする」をクリック
  9. 「Custom Search API」を見つけて有効にします
  10. [API Manager] の下の [Credentials] をクリックすると、API キーが表示されます。
  11. 不正使用やクォータの盗難を防ぐためにキーを制限することをお勧めします。キーを制限してください。

カスタム エンジン ID とカスタム検索 API キーを使用して、このページGETで指定されたパラメータを使用してリクエスト リクエストを Google に送信できます。

ここに例があります

  var searchUrl = 'https://www.googleapis.com/customsearch/v1?' + 
   'key=YOUR_API_KEY' + 
   '&cx=YOUR_SEARCH_ENGINE_ID' +
   '&q=searchTerm' +
   '&searchType=image' +
   '&num=10';

  var x = new XMLHttpRequest();
  x.open('GET', searchUrl);
  x.responseType = 'json';
  [...]

注: if is pass で関数にラップsearchTermすることをお勧めします。encodeURIComponentserachTerm

このアイデアは、stackoverflow で尋ねられた別の問題から見つけました。しかし、私は再びそれを見つけることができませんでした。誰かがコメントとしてリンクを投稿してください。

于 2017-06-16T21:33:58.857 に答える