我想要分发 PNa 应用程序、内联安装并在不离开当前页面的情况下使用该应用程序。我已经在 CWS 上发布了该应用程序。该应用程序需要一些用户权限。内联安装有效,并且应用程序出现在 Chrome 浏览器应用程序部分中。但是,我收到此错误:
"NaCl module load failed: could not load manifest 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 上,并且已成功验证。
最佳答案
观察结果:
- 您不能在打包应用程序之外使用套接字 API(因为否则无法获取它们的权限)。
- 一个packaged app大部分是独立的:它不与普通浏览器交互,而是显示在单独窗口中的预设资源集合。
- 某个网站仍然可以与该应用通信。
似乎您正在尝试同时遵循两个指南,即打包应用程序和网络应用程序。 PNaCl 可以在 Web 应用程序的上下文中工作,只需将 pexe 和 list 放在网站本身上即可;但您需要原始网络访问权限,并且只能在打包应用程序中请求。
您绝对可以使用内联安装将应用程序添加到用户的计算机,但不能将其中的模块嵌入到普通页面中。
您的模块只能嵌入应用程序自己的页面中。因此,如果你想显示一些UI,你需要将其制作为与应用程序打包在一起的页面,并用chrome.app.window.create
来显示它。 .
如果您绝对需要向某个网站公开功能,您可以 list it in externally_connectable
and use messaging API与应用程序的后台页面进行通信。
应用程序总是有一个事件页面,即page that unloads if it's idle 。因此,如果您只是通过动态创建 <embed>
将模块嵌入到该页面中元素,它可能会失败。但是,如果您使用 externally_connectable
方法,您应该能够保持端口打开,这将导致页面继续运行。
关于google-chrome-extension - Chrome PNaCl 应用内联安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28295290/