Как передать сущность Blob в собственное приложение из Firefox? - PullRequest
0 голосов
/ 08 мая 2020

Я пишу веб-расширение 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: "{}" }

Каков правильный способ передачи больших фрагментов данных или целых файлов в собственные приложения из такого расширения браузера? Не ошибаюсь ли я, пытаясь использовать для этой цели собственный обмен сообщениями?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...