Я пишу веб-расширение Firefox, которое использует собственный обмен сообщениями для отправки данных в собственное приложение для хранения и обработки. Мне нужно собственное приложение для получения и хранения изображения jpg, которое загружается в браузере, и я хочу, чтобы это происходило в фоновом режиме, без необходимости вовлекать пользователя в диспетчер загрузки файлов.
Я могу получить содержимое jpeg в форме Blob , но объект Blob не может быть правильно сериализован в JSON, и похоже, что собственный обмен сообщениями способен отправлять только сообщения JSON обратно в собственное приложение, а не произвольные байты.
Эта вспомогательная страница , кажется, охватывает передачу файлов, как то, что мне нужно, но все, что в ней нужно сказать, это
Добавить файл или BLOB-объект, который вы хотите обработать в собственном приложении, используйте JSON .stringify ().
И это не работает, при передаче Blob-объекта в stringify () он просто возвращает строку " {} ", он не может сериализовать данные.
Мой текущий фоновый скрипт, который извлекает изображение и sh устанавливает соединение с собственным приложением, выглядит так:
browser.runtime.onMessage.addListener(notify);
console.log("background process started")
function notify(message)
{
fetch(message["img"], {mode:"cors"}).then(e => e.blob()).then(function(imgData)
{
console.log("Trying to connect with reciever");
var port = browser.runtime.connectNative("nativeApp");
message["imgData"] = JSON.stringify(imgData);
console.log("sending message");
console.log(message);
port.postMessage(message);
}).catch((error) => {
console.error('Fetch Error:', error);
});
}
И все сообщение приходит обратно с:
{img: "foo.com/example.jpg", imgData: "{}" }
Каков правильный способ передачи больших фрагментов данных или целых файлов в собственные приложения из такого расширения браузера? Не ошибаюсь ли я, пытаясь использовать для этой цели собственный обмен сообщениями?