我正在尝试从Chrome扩展程序背景页面中的网站访问数据。但是,我一直收到错误。
我打包扩展程序并通过drag-n-drop将其安装到chrome:// extensions中。它确实要求我允许查看所有网站。
清单:
"permissions": ["webNavigation", "tabs", "*://*/*", "http://www.google.com/"],
Background.js:
chrome.browserAction.onClicked.addListener(function(tab) {
var xhr = new XMLHttpRequest();
xhr.open('GET', "http://www.google.com", true);
xhr.send();
}
错误
拒绝连接到' http://www.google.com/'因为它违反了以下内容安全政策指令:"默认-src'无'"。请注意,' connect-src'没有明确设置,所以' default-src'被用作后备。
browserAction.onClicked的事件处理程序出错:SecurityError:无法执行' open' on' XMLHttpRequest':拒绝连接到' http://www.google.com/'因为它违反了文档的内容安全策略。
答案 0 :(得分:2)
这两个错误分别发生,因为您尝试向页面发出请求而不询问相对权限,这些权限必须在 "content_security_policy"
(CSP)字段中设置您的扩展程序的清单,并且因为您尝试连接到不安全的来源:如果您想要使其正常工作,则需要获取页面https://
,否则Chrome将拒绝您的请求。
清单中的CSP字段应如下所示:
"content_security_policy": "default-src 'self' https://google.com"
在Chrome扩展程序开发人员指南here和W3C文档here中查看有关CSP的具体信息。
无论如何,即使配置正确的CSP并加载https
, Google仍然不允许您将XMLHttpRequest
设置为部分网页(如主页,这是你试图访问的那个)也没有将它们加载到<iframe>
中,所以即使做得很好,请求也会在服务器端被阻止,在JavaScript中产生以下错误:
Uncaught NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'https://google.com/'.
如上所述,因为无法直接加载/请求https://www.google.com/
,您只需放弃任何您希望创建的脚本,这样做会涉及。