我正在尝试通过chrome插件/扩展程序访问serial / usb端口。我正在关注chrome usb&& chrome serial,当我启动我的插件时,它会抛出
“未捕获的TypeError:无法读取未定义的属性'getDevices'”
我也试过google chrome sample的示例代码,但遇到了同样的问题,基本上chrome.usb / chrome.serial是未定义的。
任何建议给我正确的方向表示赞赏。谢谢 !
我附上我的示例代码
popup.html
function readPorts() {
console.log("Reading ports . . . . . ")
chrome.usb.getDevices(function(devices) {
console.warn('chrome.usb.getDevices error: ' +
chrome.runtime.lastError.message);
for (var i = 0; i < devices.length; i++) {
console.log('Device : ' + devices[i].path + '"===' + devices[i].path + '=====');
}
});
}
document.getElementById('clickme').addEventListener('click', readPorts);
popup.js
{
"manifest_version": 2,
"name": "Getting started example",
"description": "This extension will read the com ports from your machine",
"version": "1.0",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html",
"default_title": "Read com ports!"
},
"content_scripts": [
{
"matches": ["http://*/*","https://*/*"],
"js": ["myscript.js"]
}
],
"permissions": [
"serial",
"usb"
]
}
清单
when
答案 0 :(得分:2)
只有Chrome应用(不是Chrome扩展程序)才能访问硬件。请查看创建Chrome应用的步骤:https://developer.chrome.com/apps/first_app
答案 1 :(得分:1)
这两个API都是limited to Chrome Apps。您的清单指定了扩展名。
Chrome扩展程序完全different set of APIs。它们重叠,但一个不是另一个的超集。
如果你想要一个内容脚本(阅读:与浏览器本身交互),它必须是一个扩展。如果你想要USB /串行API,它必须是一个应用程序。
您必须重新考虑如何与浏览器进行互动(应用有一些方法可以将自己展示给自己的网页)或制作两者并让他们talk to each other。