Уведомление не отображается в расширении Chrome с использованием веб-расширения Mozilla-polyfill
Я только начал с разработки дополнения Firefox. Он отлично работает в Firefox, поэтому я хотел бы сделать его "совместимым" с расширением Coogle Chrome.
Для этого я добавляю Mozilla https://github.com/mozilla/webextension-polyfill, и в основном дополнение также работает в Chrome. Есть одна вещь, однако я не могу добраться до работы...
В 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"
}
}
фон-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);
контент-script.js
browser.storage.local.get({elementId: ""})
.then(() => {
browser.runtime.sendMessage({copied: true});
});
1 ответ
Здесь есть две проблемы...
Выпуск 1
onMessage
обработчик нужен return true
, Только тогда полифилл, похоже, сможет правильно обрабатывать сообщения.
Выпуск 2
Это похоже на ошибку в полифилле. В Chrome iconUrl
опция требуется при создании уведомления, тогда как в Firefox она необязательна.
Если я применяю эти две вещи, уведомление работает в Firefox и Chrome.