Chrome应用中的AJAX请求有哪些限制?

时间:2013-12-10 21:37:29

标签: javascript ajax google-chrome-app

我正在计划一个Chrome App项目,我将在其中执行大量的AJAX调用。在确定Chrome应用程序作为首选平台之前,我希望能够更好地了解与Web应用程序相比的AJAX调用的局限性和优势。进行了一些研究后,我想出了以下答案。由于我在这方面的经验有限,我想知道我的发现是否正确以及是否还有其他限制需要考虑。

1。原点

Chrome应用的起源限制比网络应用更灵活:通过请求same-origin policy,可以在应用的清单中放宽与AJAX请求相关的cross-origin permissions。因此,不需要像Cross-Origin Resource Sharing(CORS)和JSONP这样的技术(Content Security Policy(CSP)实际上禁止这种技术)。

2。内容

有关可访问内容的限制更严重:应用内的Chrome应用can only refer to脚本,样式表,图片,框架,插件和字体,但媒体资源(视频,音频和关联的文字轨道)可以从任何外部资源。 ‘connect-src’ directive设置为允许加载任何URI,因此给定跨源权限或使用CORS,可以对所有主机进行AJAX调用并接收文本和媒体类型响应。其他内容类型can be served as blobs. CSP不能是relaxed.

(我发现的一个特点:如上所述,CSP禁止加载多种内容类型,因此必须通过AJAX请求将它们作为blob加载。由于同源策略,这必须通过CORS完成。大多数服务器都没有启用CORS,即使它们的内容是公开的。因此,如果Chrome Apps始终强制执行“Access-Control-Allow-Origin”(ACAO)响应标头,那么CORS方法在很多情况下都会失败。 此问题的解决方案是跨源权限:如果授予访问服务器的权限,即使未收到任何适当的ACAO标头,也会通过该请求。但是也可以单独依赖CORS:如果没有授予跨域权限,但是请求是server with wildcard ACAO settings,那么它也可以通过。)

需要注意的另外两件事:

  • Chrome应用的某些文档是指扩展而非 应用。在这些情况下,我假设那里提供的信息是 也适用于应用程序。
  • 同步XHR请求为disabled.

1 个答案:

答案 0 :(得分:0)

不幸的是,你只需要测试这一切。我发现Google文档(尤其是Chrome应用)非常缺乏并经常出错。通过文档,似乎他们为扩展编写了它们,复制了所有文档,然后当遇到差异时,他们更改了文档,但没有涵盖所有内容。

关于访问外部来源,请按照以下“说明”操作: http://developer.chrome.com/apps/app_external.html#external

如果您发现问题,请在此处报告并https://code.google.com/p/chromium/issues/list