【问题标题】:Firefox OS packaged apps and XMLHttpRequestsFirefox OS 打包应用程序和 XMLHttpRequests
【发布时间】:2012-12-02 02:53:55
【问题描述】:

我一直在研究 Firefox 操作系统的打包应用程序,我依赖模拟器,因为我没有在设备上构建操作系统。我在处理 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?

【问题讨论】:

  • 已编辑以指定我使用的是 OSX。
  • 我有机会在 Windows 版本的模拟器上尝试这个,XHR 可以正常工作。似乎 OSX 模拟器预览版有问题。
  • 在安装应用程序时,您是否对其进行了压缩,并按照您的要求使用其他清单以使特权类型工作?

标签: firefox-os


【解决方案1】:

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

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

【讨论】:

  • 是的,是的。我有,但仍然没有快乐。
【解决方案2】:

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

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

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

请注意,如果您忘记设置

数据类型:“文本”

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

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-11
        • 2012-06-15
        • 2014-06-17
        • 1970-01-01
        • 1970-01-01
        • 2013-02-14
        • 2014-03-25
        • 2013-08-14
        相关资源
        最近更新 更多