我正在尝试从网页与打包的应用进行通信。想法是让网页从串行设备读取数字。因为我想访问串行设备,我需要一个打包的应用程序,不能使用扩展。这与Keep Chrome Packaged App running in background?非常相似,似乎Chrome documentation表示这是可能的。
如何从常规网页执行chrome.runtime.sendMessage?当我这样做时,我得到* Uncaught TypeError:无法读取未定义的属性'sendMessage'。我的简单功能是:
function doFunction(){
chrome.runtime.sendMessage(editorExtensionId, {openUrlInEditor: url},
function(response) {
if (!response.success)
handleError(url);
});
}
我的打包应用程序加载并可以访问串行端口。但我的怀疑是清单不是“启用”常规网页的chrome.runtime。的manifest.json:
{
"name": "Hello World!",
"description": "My first Chrome App.",
"version": "0.1",
"app": {
"background": {
"scripts": ["background.js"]
}
},
"icons": { "16": "calculator-16.png", "128": "calculator-128.png" },
"permissions": [
"serial",
"*://localhost/*"
],
"externally_connectable": {
"matches": [
"*://localhost/*"]
}
}
也许是我用于测试的:// localhost / 。但Chrome并没有抱怨。
有什么想法吗?提前谢谢。
答案 0 :(得分:6)
Xan的评论起到了作用。
虽然Chrome没有抱怨*://localhost/*
,但它无效。 Chrome确实抱怨其他组合,例如file://localhost/
。
我将foo.com添加到主机文件中,然后通过Web服务器提供了我的网页,它运行良好!我可以从我的网页与我的打包应用程序进行通信。
请注意,浏览到file://www.foo.com/hostpage.html不起作用。但是浏览http://www.foo.com:3000/hostpage.html确实如此。 (我正在使用Rails,因此是3000端口)。
故事的故事:在本地测试时,您需要将一个伪造的二级域名条目添加到您的主机文件中。
这是我的manifest.json:
{
"name": "RFID Tag Reader",
"description": "Reads RFID Tags connected via USB reader",
"version": "0.0.0.1",
"app": {
"background": {
"scripts": ["background.js"]
}
},
"icons": {
"16": "rfid-16.png",
"128": "rfid-128.png"
},
"permissions": [
"serial",
"*://www.foo.com/*",
"*://arealsite.net/*"
],
"externally_connectable": {
"matches": [
"*://www.foo.com/*",
"*://arealsite.net/*"
]
}
}