编辑: 我在将项目加载为chrome扩展程序时遇到此问题。我认为这可能是特定于Chrome扩展程序的问题。
当我尝试在Google自定义搜索引擎上搜索时,我会得到一个结果页面,但它是空白的。当我检查它时,我收到以下错误:
拒绝加载脚本 'http://clients1.google.com/complete/search?client=partner&hl=en&sugexp=gsno ... 208%3Avdsj6wr1edq&安培;类型= T&安培; DS = CSE&安培; CP = 1&安培; gs_id = 4和Q = M&安培;回调= 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://*/*"]
}]
}
如果返回结果使用HTTPS而不是HTTP,我需要做什么?
答案 0 :(得分:0)
我仍在研究/阅读GCSE相关文档,希望找到解决问题的方法。但是,与此同时,我想提供另一种方法来向Google自定义搜索提交请求。
基本理念是将Google Custome搜索引擎与Google Custom Search API结合使用。以下是步骤/细节(如果您在我的问题中遇到了同样的问题,您应该已经创建了一个自定义搜索引擎并获得了cx
的引擎ID,但我将包含如何创建一个的方向如果您已经这样做,请跳至步骤5)
点击&#34;获取代码&#34;您应该看到这样的个人引擎ID cx
var cx =&#39; MY_ENGINE_ID&#39;;
获取引擎ID后。 Create Google Custom Search API(您获得300.00美元的学分和365天的免费试用)
完成注册步骤。完成后,您将进入主屏幕
现在,您可以使用自定义引擎ID和自定义搜索API密钥,使用此page
中指定的参数向Google提交请求GET
请求
这是一个例子
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
传递给函数,最好将encodeURIComponent
与serachTerm
一起打包。
我从stackoverflow上提出的另一个问题中发现了这个想法。但我无法再找到它。如果有人请将该链接发布为评论。