Firefox OS打包应用程序和XMLHttpRequests

时间:2012-12-14 05:10:21

标签: firefox-os

我一直在寻找适用于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"
}

已经回答了similar question,但我认为答案可能是针对网络应用,而不是打包的应用,并且一个例子可以帮助无懈可击。

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

4 个答案:

答案 0 :(得分:7)

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

var xhr = new XMLHttpRequest({mozSystem: true});

答案 1 :(得分:2)

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

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

我认为你不需要使用CORS。我的应用程序在没有CORS的模拟器中工作正常,但如果在本地服务器上启动则无法调用远程REST服务器。

请注意,如果您忘记设置

  

dataType:“text”

对于一些$ .ajax调用(例如加载html模板),您可以在桌面浏览器返回字符串时获取XMLDocument。

答案 2 :(得分:0)

答案 3 :(得分:0)

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

"permissions": {
    "systemXHR" : {
      "description" : "Required to access remote api"
    }
}