【问题标题】:XMLHttpRequest succeeds without manifest permissions? Maybe CORS?XMLHttpRequest 在没有清单权限的情况下成功?也许CORS?
【发布时间】:2013-02-16 13:04:32
【问题描述】:

我开发了一个使用 YouTube 数据 API v2 的 Google Chrome 扩展程序。我在清单中的权限字段如下所示,因为脚本是在 youtube.com 下的页面中注入的,而且我还需要访问选项卡:

"permissions": ["tabs", "*://*.youtube.com/*"]

当我向 YouTube 数据 API v2 发出请求时,这也有效,因为请求是向 http://gdata.youtube.com/ 发出的,所以它是同一个域。但现在我正在迁移到 YouTube Data API v3,并且请求必须发送到 http://www.googleapis.com/youtube/v3/(注意 HTTPS 而不是 HTTP)。然而,令人惊讶的是,我的请求在没有添加任何新权限的情况下运行良好

我知道,我问的问题似乎不是问题,但我个人认为我的软件中我不理解的任何行为都是问题。为什么会这样?我是否不应该添加诸如"*://*.googleapis.com/*" 之类的权限以使我对 API 的 XMLHttpRequest 请求能够正常工作?

我对此也有一些猜测HTTP Access Control headers。我的请求确实发送了一个Origin 标头,其值为chrome-extension://myExtensionId。 API 的答案还包含以下标头:

Access-Control-Allow-Origin: chrome-extension://myExtensionId

但这可能是 Chrome 允许我在清单中未定义任何额外权限的情况下执行跨域 XMLHttpRequest 的原因吗?不确定,显然 Google API、YouTube 数据 API v3 或 Chrome 扩展开发者文档中没有记录。

【问题讨论】:

    标签: google-chrome-extension xmlhttprequest cross-domain google-api youtube-api


    【解决方案1】:

    如果 Chrome 在清单中没有找到权限,它会将请求视为正常请求。这意味着当设置了正确的CORS 标头时,请求仍然会成功。否则,请求会因为same origin policy而失败。

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

    Making a request: Option 3
    Google API 支持 CORS。有关使用 CORS 发出请求的更多信息,请访问 CORS 页面。

    如果可能,我仍然建议将权限添加到清单文件。对于simple requests,这并没有带来任何好处。对于非简单请求,这将使请求数量减半:非简单请求之前总是有一个预检 (OPTIONS) 请求,该请求检查客户端是否被允许访问源。

    通过向清单文件添加权限,Chrome 将不会回退到 CORS,并且始终使用一个网络请求来完成请求。太好了!
    但是……如果您是已经部署的扩展的作者,您可能会再想一想。当新的原始权限添加到清单文件时,扩展将被禁用,直到用户批准扩展。对话框显示“删除扩展”和“启用”并排显示,因此有可能失去用户。

    如果您愿意,可以使用在选项页面激活的optional permission 来解决此问题。用通俗的语言清楚地说明该选项将提高扩展的速度,并且不要忘记提及将请求额外的权限。

    【讨论】:

    • 非常感谢这个清晰而详细的回答!那时我的猜测并没有那么错误。你是对的,上次我增加了我的currently published extension 的权限,我失去了大约 50% 的用户并获得了大量的 1 星评级。我只需要“标签”权限来显示 pageAction,但警告消息令人震惊(“访问所有浏览历史记录”或类似内容)。由于我的所有请求都简单,我决定不添加新权限。再也不会了。
    • 顺便说一句,以防你也知道我最近提出的一个相关问题的答案:stackoverflow.com/questions/15166758/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多