chrome приложение: передавать данные из фонового скрипта на веб-страницу - PullRequest
0 голосов
/ 07 августа 2020

Я пишу 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; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...