0

编辑: 当我将项目加载为 chrome 扩展时,我遇到了这个问题。我认为这可能是特定于 chrome 扩展的问题。

当我尝试在谷歌自定义搜索引擎上搜索时,我得到一个结果页面,但它是空白的。当我检查它时,我收到以下错误:

拒绝加载脚本' 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 文件。就我而言,它是调用 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);
  })();
});

我的清单.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://*/*"]
  }]
}

我需要做什么才能让返回结果使用 HTTPS 而不是 HTTP?

4

1 回答 1

0

我仍在研究/阅读 GCSE 相关文档,希望能找到解决问题的方法。但是,与此同时,我想提供一种替代方式来向 Google 自定义搜索提交请求。

基本思想是使用带有 Google Custom Search API 的 Google Custome Search Engine。以下是步骤/详细信息(如果您遇到了我在问题中发布的相同问题,您应该已经创建了一个自定义搜索引擎并获得了一个引擎 ID cx,但我将包括如何创建一个以防万一的说明。跳至步骤5 如果您已经这样做了)

  1. 通过获取帐户定义自定义搜索引擎
  2. 点击“编辑搜索引擎”下的“设置”
  3. 如果您想让您的搜索引擎进行图像搜索,请打开“图像搜索”
  4. 单击“获取代码”您应该会看到您的个人引擎 ID cx,如下所示

    var cx = 'MY_ENGINE_ID';

  5. 获得引擎 ID 后。创建 Google 自定义搜索 API(您将获得 300.00 美元的信用额度和 365 天的免费试用期)

  6. 完成注册步骤。完成后,您将在主屏幕上

  7. 在 APIs 卡片下,单击“Go to APIs Overview”。
  8. 然后点击“启用 API”
  9. 找到“自定义搜索 API”然后启用它
  10. 现在,如果您单击“API Manager”下的“凭据”,您应该会看到一个 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';
  [...]

searchTerm注意:用encodeURIComponentif包裹serachTerm到函数中可能是个好主意。

我从 stackoverflow 上提出的另一个问题中想到了这个想法。但我再也找不到它了。如果有人这样做,请将链接作为评论发布。

于 2017-06-16T21:33:58.857 回答