Google chrome extension Chrome扩展,XMLHttpRequest内容安全策略错误

Google chrome extension Chrome扩展,XMLHttpRequest内容安全策略错误,google-chrome-extension,Google Chrome Extension,我有一个Chrome扩展,它从扩展的背景脚本向我的网站发出POST请求。我收到以下错误(显示在Chrome的扩展管理器中): 拒绝连接到“”,因为它违反了以下内容安全策略指令:“default src‘none’”。请注意,未显式设置“connect src”,因此使用“default src”作为回退 老实说,我甚至不清楚是否需要更改js代码或服务器端的某些内容 background.js: var xmlHttp; function makerequest(){ xmlHttp=n

我有一个Chrome扩展,它从扩展的背景脚本向我的网站发出POST请求。我收到以下错误(显示在Chrome的扩展管理器中):

拒绝连接到“”,因为它违反了以下内容安全策略指令:“default src‘none’”。请注意,未显式设置“connect src”,因此使用“default src”作为回退

老实说,我甚至不清楚是否需要更改js代码或服务器端的某些内容

background.js:

var xmlHttp;

function makerequest(){
    xmlHttp=new XMLHttpRequest();
    xmlHttp.open("POST", "https://my.website.com/path/",true);
    xmlHttp.onreadystatechange = got_response;
    var formData = new FormData();  
    xmlHttp.send(formData); 
}

function got_response(){
    if (xmlHttp.readyState == 4){
         alert(xmlHttp.responseText);  
    }
}
舱单包括:

"permissions": ["activeTab", "*://my.website.com/*","contextMenus"],

"background": {
    "scripts": ["background.js"],
    "persistent": false
  },

"content_security_policy":"connect-src 'self' https://my.website.com/*",

我看到还有其他相关的问题/答案。但是,他们要么试图访问其他人的网站(不是我控制的网站),要么使用内联代码存在问题,这似乎不是问题所在,因为代码位于background.js中(如果是,请解释!)。如果您建议另一个答案,或投票关闭,请实际检查其他答案是否回答了此问题。

您需要从CSP字符串中删除尾随的星号。在CSP字符串中,在源标识符的路径部分,星号不会被解释为通配符。您当前的CSP字符串只允许连接到文本URL
https://my.website.com/*

明确表示:

匹配包含路径的源表达式的规则如下 比看起来更简单:以“/”字符匹配结尾的路径 目录及其子目录中的所有文件不结束的路径 使用“/”字符只能匹配一个特定文件。

除此之外,清单中的CSP字符串应限制
脚本src
对象src
(显式或使用
默认src
)。如果不这样做,Chrome会在扩展详细信息页面上显示警告

因此,清单中的CSP行应如下所示:

"content_security_policy":"default-src 'self'; connect-src 'self' https://my.website.com/",

应该不需要
内容安全策略
。尝试将其删除(并确保在上重新加载扩展名)chrome://extensions 第页)。如果它不起作用,浏览器中可能会有一个bug,那么试试更旧的便携式版本或Chrome Canary。它仍然会失败,并出现同样的错误。我两次都试过了ttps://my.website.com/ 和https://my.website.com/path/ 连接-src@user984003奇怪的是,我在Windows中的Chrome官方版本(80.0.3987.122)中没有发现任何错误。你使用的是什么版本的Chrome?您可以尝试在DevTools中检查生成的后台页面的CSP标题(它将在重新加载后与任何其他页面一样显示在网络选项卡上)。我使用的是最新的非测试版Chrome。这可能是网站服务器端设置的问题吗?URL不会出现在“网络”选项卡上。因此,我猜它甚至被阻止调用。如果我从background.JS页面注入的JS运行它,而不是从background.JS spage运行它,它就会工作(即使没有任何内容安全参数)。也许我必须这样做,尽管我想直接从background.js进行尝试