3

我一直在研究 Firefox OS 的打包应用程序,我依赖模拟器,因为我没有在设备上构建操作系统。我在处理 XHR 请求时遇到了问题,我不确定问题是我忽略的设置还是模拟器有问题。

我对文档的阅读表明,为 network-http 添加权限应该足以向 Web 服务发出 XHR 请求。我还在源代码中看到了 systemXHR 权限。我都试过了,但到目前为止没有任何乐趣。我将模拟器与 Firefox for OS X 一起使用,我的清单如下所示:

显现:

{
  "version": "0.1",
  "name": "Hello World",
  "description": "A hello world app.",
  "launch_path": "/app/index.html",
  "icons": {
    "16": "/app/img/icons/mortar-16.png",
    "48": "/app/img/icons/mortar-48.png",
    "128": "/app/img/icons/mortar-128.png"
  },
  "installs_allowed_from": ["*"],
  "permissions": {
    "systemXHR": {},
    "network-http": {},
    "network-tcp": {}
  },
  "type": "privileged"
}

已经回答了类似的问题,但我认为答案可能是针对 Web 应用程序,而不是打包的应用程序,并且无论如何举个例子都会有所帮助。

我是否遗漏了一些明显的东西,模拟器是否损坏,或者打包的应用程序是否需要 CORS?

4

4 回答 4

7

请注意,要使用 systemXHR 权限,您还需要在创建请求对象时传递一个特殊参数,例如

var xhr = new XMLHttpRequest({mozSystem: true});
于 2012-12-14T15:47:23.383 回答
2

对于后台使用 JQuery $.ajax 的 Backbone 或其他 Javascript 框架,请使用:

$.ajaxSetup( {
    xhr: function() {return new window.XMLHttpRequest({mozSystem: true});}
});

我认为您不需要使用CORS。我的应用在没有 CORS 的模拟器中运行良好,但如果在本地服务器上启动,则无法调用远程 REST 服务器。

请注意,如果您忘记设置

数据类型:“文本”

对于某些 $.ajax 调用(例如加载 html 模板),您可以获得 XMLDocument 作为结果,而桌面浏览器返回字符串。

于 2013-09-25T11:02:22.583 回答
0

看看 Rob Nyman Boilerplate,他有一个有效的 XHR 演示

https://github.com/robnyman/Firefox-OS-Boilerplate-App

http://robnyman.github.com/Firefox-OS-Boilerplate-App/

于 2013-03-05T16:05:02.487 回答
0

要在我的 Firefox OS 应用程序中启用 CORS,我必须在应用程序 manifest.webapp 文件中启用 systemXHR 权限:

"permissions": {
    "systemXHR" : {
      "description" : "Required to access remote api"
    }
}
于 2014-08-20T19:03:23.450 回答