Chrome PNaCl app内联安装

时间:2015-02-03 09:21:46

标签: google-chrome-extension google-chrome-app google-nativeclient

我想分发 PNaCl 应用,内联安装,并使用应用而不离开当前页面。我在CWS上发布了这个应用程序。该应用需要一些用户权限。内联安装有效,应用程序会显示在Chrome浏览器应用部分中。但是,我收到了这个错误:

  

" NaCl模块加载失败:无法加载清单URL"

当我尝试使用以下方式加载应用时:

  <embed id="testapp"
         width=0 height=0
         src="testapp.nmf"
         type="application/x-pnacl" />

这是testapp.nmf文件,它位于我上传到开发人员仪表板的.zip pkg中。

{
  "program": {
    "portable": {
      "pnacl-translate": {
        "url": "testapp.pexe"
      },
      "pnacl-debug": {
        "url": "testapp_unstripped.bc"
      }
    }
  }
}

包文件中的Manifest.json如下所示:

{
  "name": "testapp",
  "version": "0.0.0.2",
  "manifest_version": 2,
  "description": "TCP/UDP test",
  "offline_enabled": true,
  "icons": {
    "128": "icon128.png"
  },
  "app": {
    "background": {
      "scripts": ["background.js"]
    }
  },
  "permissions": [
    {
        "socket": [
            "tcp-listen:*:*", 
            "tcp-connect", 
            "resolve-host", 
            "udp-bind:*:*", 
            "udp-send-to:*:*"
        ]
    }
  ]
}

HTML页面位于Google的 blogspot.com 上,并已成功验证。

1 个答案:

答案 0 :(得分:2)

观察:

  • 您不能在打包的应用程序之外使用套接字API(因为没有办法获取它们的权限)。
  • packaged app主要是自包含的:它不是与普通浏览器交互的东西,它是在单独窗口中显示的预设资源集合。
  • 某个网站仍然可以与该应用进行通信。

似乎您正在尝试一次关注两个指南,包括打包的应用和网络应用。通过将pexe和清单放在网站本身上,PNaCl可以在Web应用程序的上下文中工作;但是您需要原始网络访问权限,并且只能在打包的应用程序中请求。

您绝对可以使用内联安装将应用程序添加到用户的计算机,但无法在正常页面中嵌入模块。

您的模块只能嵌入应用程序自己的页面中。因此,如果您想要显示一些用户界面,则需要将该网页与应用一起打包,并使用chrome.app.window.create进行展示。

如果您绝对需要向某个网站公开功能,您可以list it in externally_connectable and use messaging API与该应用的背景页进行通信。

应用程序始终有一个事件页面,即page that unloads if it's idle。因此,如果您只是通过动态创建<embed>元素将模块嵌入到该页面中,则可能会失败。但是,如果您使用externally_connectable方法,则应该能够保持端口打开,这会导致页面继续运行。