Я пишу chrome приложение для работы с последовательным портом. Разрешение «серийный» доступно только для приложения chrome, но не для расширения. Данные из порта доставлены в приложение crome. Теперь мне нужно передать эти данные во внешний интерфейс веб-приложения (nuxt. js). Как передать данные из фонового скрипта на веб-страницу?
manifest. js
{
"name": "chrome_com_port_proxy",
"version": "1.0",
"description": "chrome com_port proxy",
"manifest_version": 2,
"app": {
"background": {
"persistent": false,
"scripts": ["js/background.js"]
}
},
"icons": {
"16": "icon/icon_origin.png",
"128": "icon/icon_origin.png"
},
"permissions": ["serial"]
}
background. js
chrome.app.runtime.onLaunched.addListener(function() {
console.log('onLaunched')
chrome.serial.connect("COM3", {
bitrate: 115200
},
onConnect);
});
var stringReceived = '';
var onConnect = function(connectionInfo) {
var connectionId = connectionInfo.connectionId;
var onReceiveCallback = function(info) {
if (info.connectionId == connectionId) {
var str = arrayBufferToString(info.data);
if (str.charAt(str.length-1) === '\n') {
stringReceived += str.substring(0, str.length-1);
chrome.runtime.sendMessage('barcode_recieve', {
action: 'scanner', data: { barcode: stringReceived }
});
document.dispatchEvent(new CustomEvent('barcode_recieve', { detail: stringReceived }));
console.log(stringReceived)
stringReceived = '';
} else {
stringReceived += str;
}
}
};
chrome.serial.onReceive.addListener(onReceiveCallback);
};
function arrayBufferToString (buffer) {
var string = '';
var bytes = new Uint8Array( buffer );
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
string += String.fromCharCode( bytes[ i ] )
}
return string;
}