Chrome 扩展 XMLHttpRequest:内容安全策略指令

Chrome extension XMLHttpRequest: Content Security Policy directive

我正在尝试从我的 Chrome 扩展背景页面中的网站访问数据。但是,我不断收到错误消息。

我打包了扩展程序并通过拖放将其安装到 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/”,因为它违反了以下内容安全策略指令:"default-src 'none'"。请注意,'connect-src' 未明确设置,因此 'default-src' 用作后备。

browserAction.onClicked 的事件处理程序出错:SecurityError:无法在 'XMLHttpRequest' 上执行 'open':拒绝连接到“http://www.google.com/”,因为它违反了文档的内容安全策略。

这两个错误分别发生是因为您试图在不请求相关权限的情况下向页面发出请求,这些权限必须在 "content_security_policy" (CSP) 字段中设置 您的扩展清单,并且因为您正在尝试连接到一个不安全的来源:如果您想要它有效,否则 Chrome 将拒绝您的请求。

清单中的 CSP 字段应如下所示:

"content_security_policy": "default-src 'self' https://google.com"

在 Chrome 扩展开发人员指南 here and in the W3C documentation here 中查看有关 CSP 的具体信息。


无论如何,即使配置正确的 CSP 并加载 httpsGoogle 仍然无法让您对他们的某些页面进行 XMLHttpRequest(就像主页一样,这是您要访问的页面)也不会将它们加载到 <iframe> 中,所以即使一切正常,请求将在服务器端被阻止,在JavaScript中产生以下错误:

Uncaught NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'https://google.com/'.

如上所述,由于无法直接 load/request https://www.google.com/,您只需要放弃任何您希望创建的涉及这样做的脚本.