特定の USB デバイスと通信する必要がある chromebook 用のアプリを作成しています。デバイスは、コールバックから取得された、検出されたデバイスのリストに存在します。
var VENDOR_ID = 5824, PRODUCT_ID = 1159;
document.getElementById("request-permission").addEventListener('click', function() {
chrome.permissions.request({
permissions: [{
'usbDevices': [{
'vendorId': VENDOR_ID,
"productId": PRODUCT_ID
}]
}]
},
function(result) {
if (result) {
console.log('App was granted the "usbDevices" permission.');
getDevices();
}
}
});
});
function getDevices() {
chrome.usb.getDevices({
vendorId: VENDOR_ID,
productId: PRODUCT_ID
}, function(devices) {
if (chrome.runtime.lastError !== undefined) {
console.warn('chrome.usb.getDevices error: ' + chrome.runtime.lastError.message);
return;
}
if (devices) {
if (devices.length > 0) {
for (var device of devices)
openUsbDevice(device);
}
}
});
}
したがって、デバイスを正常に表示できますが、開こうとすると失敗します。
chrome.usb.openDevice(device, function(handle) {
if (chrome.runtime.lastError != undefined) {
console.log('Failed to open device: '+chrome.runtime.lastError.message);
} else {
populateDeviceInfo(handle, function () {
chrome.usb.closeDevice(handle);
});
}
});
そして、コンソールに次のエラーが表示されます: デバイスを開くことができませんでした: デバイスにアクセスする権限が拒否されました
manifest.js で宣言された必要なすべての USB アクセス許可を持っています。
"permissions" : [
"usb"
],
"optional_permissions" : [{
"usbDevices" : [
{
"productId" : 1159,
"vendorId" : 5824
}
]
}],
chrome.usb.findDevicesやchrome.usb.requestAccessなどの別の API 関数も試しましたが、結果は同じです。同時に、私の nexus 7 デバイスなどは USB 経由で正常に認識されます。それがなぜできるのか、または私のUSBデバイスをアクセス可能にする方法を推測する考えはありますか? 私はこれに直面したのは Acer Chromebook c7 (Chrome OS v.44) だけで、Mac ではそのような問題はありませんでした。