Уведомление не отображается в расширении Chrome с использованием веб-модуля Mozilla webextension-polyfill - PullRequest
0 голосов
/ 25 мая 2018

Я только начал разрабатывать дополнение для Firefox.Он отлично работает в Firefox, поэтому я хотел бы сделать его «совместимым» с расширением Coogle Chrome.

Для этого я добавляю Mozilla webextension-polyfill , и, в основном, дополнение также запускаетсяв хроме.Однако есть одна вещь, которую я не могу заставить работать ...

В Firefox пользователю показывается уведомление, если скрипт содержимого отправляет сообщение, полученное фоновым скриптом.Запуск этого в Chrome приводит к следующему исключению:

Uncaught (in promise) 
{message: "The message port closed before a response was received."}
callbackArgs @ VM18 browser-polyfill.js:630
sendResponseAndClearCallback @ VM29 extensions::messaging:417
disconnectListener @ VM29 extensions::messaging:441
EventImpl.dispatchToListener @ VM19 extensions::event_bindings:403
publicClassPrototype.(anonymous function) @ VM25 extensions::utils:138
EventImpl.dispatch_ @ VM19 extensions::event_bindings:387
EventImpl.dispatch @ VM19 extensions::event_bindings:409
publicClassPrototype.(anonymous function) @ VM25 extensions::utils:138
dispatchOnDisconnect @ VM29 extensions::messaging:378

Я могу сказать, что это происходит от webextension-polyfill, но я не могу найти способ, чтобы уведомление также отображалось в Chrome.

Вот соответствующие фрагменты кода ...

manifest.json

{
  "manifest_version": 2,
  // ...
  "background": {
    "scripts": [
      "lib/browser-polyfill.js",
      "background-script.js"
    ],
    "persistent": false
  },

  "options_ui": {
    "page": "settings/options.html"
  }
}

background-script.js

function notify(message) {
    if (message.copied) {
        browser.notifications.create({
           "type": "basic",
           "title": "Notifaction title",
           "message": "Hello, world!"
        });
    }
}

browser.browserAction.onClicked.addListener(() => {
    browser.tabs.executeScript({file: "lib/browser-polyfill.js"});
    browser.tabs.executeScript({file: "content-script.js"});
});

browser.runtime.onMessage.addListener(notify);

content-script.js

browser.storage.local.get({elementId: ""})
    .then(() => {
        browser.runtime.sendMessage({copied: true});
    });

1 Ответ

0 голосов
/ 26 мая 2018

Здесь есть две проблемы ...

Проблема 1

Для обработчика onMessage требуется return true.Только тогда полифилл, похоже, сможет правильно обрабатывать сообщения.

Выпуск 2

Это похоже на ошибку в полифиле.В Chrome опция iconUrl имеет значение , обязательное при создании уведомления, тогда как в Firefox необязательно .

Если я применяю эти две вещи, уведомление работает в Firefox иChrome.

...