Google chrome extension XMLHttpRequest在没有清单权限的情况下成功?也许是科尔斯?

Google chrome extension XMLHttpRequest在没有清单权限的情况下成功?也许是科尔斯?,google-chrome-extension,xmlhttprequest,cross-domain,google-api,youtube-api,Google Chrome Extension,Xmlhttprequest,Cross Domain,Google Api,Youtube Api,我开发了一个Google Chrome扩展,它使用YouTube数据APIv2。清单中的“我的权限”字段如下所示,因为脚本被注入youtube.com下的页面,我还需要访问选项卡: "permissions": ["tabs", "*://*.youtube.com/*"] 当我向YouTube Data APIv2发出请求时,这也会起作用,因为请求是向发出的,所以它是同一个域。但是现在我正在迁移到YouTube数据APIv3,请求必须发送到(注意HTTPS,而不是HTTP)。然而,令人惊讶的

我开发了一个Google Chrome扩展,它使用YouTube数据APIv2。清单中的“我的权限”字段如下所示,因为脚本被注入youtube.com下的页面,我还需要访问选项卡:

"permissions": ["tabs", "*://*.youtube.com/*"]
当我向YouTube Data APIv2发出请求时,这也会起作用,因为请求是向发出的,所以它是同一个域。但是现在我正在迁移到YouTube数据APIv3,请求必须发送到(注意HTTPS,而不是HTTP)。然而,令人惊讶的是,我的请求在没有添加任何新权限的情况下运行良好

我知道,我在问一些似乎不成问题的问题,但是我个人认为我在软件中不理解的任何行为都是个问题。为什么会发生这种情况?我不应该添加一个权限,例如
“*://*.googleapis.com/*”
,以便我对API的XMLHttpRequest请求能够工作吗

关于这一点,我也有一些猜测之王。我的请求确实会发送一个带有值的
Origin
头-extension://myExtensionId。API的答案还包含以下标题:

访问控制允许原点:chrome-extension://myExtensionId


但这可能是Chrome允许我在没有清单中定义的任何额外权限的情况下执行跨源XMLHttpRequest的原因吗?不确定,而且显然谷歌API、YouTube Data API v3或Chrome Extensions开发者文档中没有记录这一点。

如果Chrome在清单中找不到权限,它会将请求视为正常请求。这意味着当设置了正确的头时,请求仍然会成功。否则,请求将由于错误而失败

Google API JavaScript库明确提到了对CORS的支持:


谷歌API支持CORS。请访问CORS页面,了解有关使用CORS进行请求的更多信息

如果可能,我仍然建议将权限添加到清单文件中。因为,这不会带来任何好处。对于非简单请求,这将是请求数量的一半:非简单请求总是在飞行前(选项)请求的前面,该请求检查是否允许客户端访问源

通过向清单文件添加权限,Chrome将不会退回到CORS,并且始终使用一个网络请求来完成请求。太好了
然而。。。如果您是已经部署的扩展的作者,您可能会三思而后行。将新的源权限添加到清单文件时,将禁用扩展名,直到用户批准该扩展名。该对话框显示“删除扩展名”和“启用”相邻,因此有可能失去用户


如果您愿意,您可以通过使用在“选项”页面上激活的解决此问题。用外行语言清楚地解释,该选项将提高扩展的速度,不要忘了提及将请求额外的权限。

非常感谢您给出的清晰详细的回答!当时我的猜测没有那么错。你是对的,上次我增加了我的网站的权限,我失去了大约50%的用户,获得了大量的一星级评级。我只需要“tabs”权限来显示页面操作,但警告消息令人震惊(“访问所有浏览历史记录”或类似内容)。由于我所有的请求都很简单,我决定不添加新的权限。再也不会了。顺便说一句,以防你也知道我最近提出的一个相关问题的答案: