#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); } });