Обмен сообщениями между сценариями контента и background.js

#javascript #google-chrome-extension

#язык JavaScript #google-chrome-расширение

Вопрос:

Я хочу отправить данные mediarecorder.dataavailable (), которые возвращают большой двоичный объект из сценария содержимого в background.js. если я отправлю только большой двоичный объект, отправлю только пустой объект {}, поэтому я преобразовал его в строку. здесь я преобразую большой двоичный объект в unit8Array с помощью функции ‘blobToUint8Array’, затем я преобразую его в строку и передаю ее.

 mediaRecorder.ondataavailable = function (e) {  if (e.data.size gt; 0) {  // recordedChunks.push(e.data);  console.log("message: ", e.data)  blobToUint8Array(e.data, function(results) {  // This function gets called by the geocode function on success  var blobString = new TextDecoder().decode(results);  chrome.runtime.sendMessage({  upload_name: true,  file_name: blobString,  });   });  }  };  
 function blobToUint8Array(b, callback) {  var uri = URL.createObjectURL(b),  xhr = new XMLHttpRequest(),  i,  ui8;   xhr.open('GET', uri, false);  xhr.send();   URL.revokeObjectURL(uri);   ui8 = new Uint8Array(xhr.response.length);   for (i = 0; i lt; xhr.response.length;   i) {  ui8[i] = xhr.response.charCodeAt(i);  }   callback(ui8); }  

здесь я читаю строку и создаю большой двоичный объект с тем же типом отправленного. но это не сработало так, как ожидалось.

 chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {  let message = request.upload_name;  if (message) {  var responseData = request.file_name;    console.info("message type: ", toType(responseData));  var encodedFromString = new TextEncoder().encode(responseData);  var blobElement = new Blob([encodedFromString], {type : 'video/x-matroska;codecs=avc1'});   recordedChunks1.push(blobElement);  } });