我想分发 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 上,并已成功验证。
答案 0 :(得分:2)
观察:
似乎您正在尝试一次关注两个指南,包括打包的应用和网络应用。通过将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
方法,则应该能够保持端口打开,这会导致页面继续运行。