Похоже, проблема в том, что вы пытаетесь открыть новый URL-адрес, но это не работает.
Следующее должно работать при использовании chrome.tabs.create()
:
var q = chrome.notifications.create("MyExtensionNotificationId", {
"type": "basic",
"iconUrl": chrome.extension.getURL("128-128q.png"),
"title": 'title',
"message": 'content'
});
chrome.notifications.onClicked.addListener(function(notificationId) {
chrome.tabs.create({url:"http://www.google.com"});
});
Тем не менее, вам необходимо протестировать это в Firefox 47.0+ в качестве поддержки chrome.notifications.onClicked()
был добавлен совсем недавно. Мое заявление о Firefox 47.0+ основано на таблице совместимости. Однако в таблице совместимости есть по крайней мере одна определенная ошибка. Таким образом, может потребоваться более высокая версия Firefox. Код, который я протестировал, работал в Firefox Nightly версии 50.0a1, но не работал должным образом в Firefox Developer Edition версии 48.0a2. В общем, учитывая, что WebExtensions API находится в активной разработке, вам следует протестировать Firefox Nightly, если у вас есть вопросы/проблемы, которые не работают так, как вы ожидаете. Вы также можете проверить исходный код. чтобы API видел, что реально реализовано и когда добавлено.
Примечание. это работает как с chrome.notifications.onClicked
, так и с browser.notifications.onClicked
. Однако не используйте оба для добавления двух отдельных анонимных функций, которые делают одно и то же, так как это приведет к тому, что все, что вы делаете, произойдет дважды.
На самом деле я не тестировал его с вашим кодом, но я проверил его с модифицированной версией notify-link-clicks-i18n Пример WebExtensions. Я изменил файл background-script.js из этого примера следующим образом:
/*
Log that we received the message.
Then display a notification. The notification contains the URL,
which we read from the message.
*/
function notify(message) {
console.log("notify-link-clicks-i18n: background script received message");
var title = chrome.i18n.getMessage("notificationTitle");
var content = chrome.i18n.getMessage("notificationContent", message.url);
let id = "notify-link-clicks-i18n::" + title + "::" + message.url;
chrome.notifications.create(id,{
"type": "basic",
"iconUrl": chrome.extension.getURL("icons/link-48.png"),
"title": title,
"message": content
});
}
/*
Assign `notify()` as a listener to messages from the content script.
*/
chrome.runtime.onMessage.addListener(notify);
//Add the listener for clicks on a notification:
chrome.notifications.onClicked.addListener(function(notificationId) {
console.log("Caught notification onClicked with ID:" + notificationId);
//Open a new tab with the desired URL:
browser.tabs.create({url:"http://www.google.com"});
});
Я предпочитаю нечто подобное, где возможен уникальный ID должен предоставить уникальный идентификатор, который идентифицирует то, что уведомление было отображено моим дополнением, и то, что это было за уведомление. Это позволяет функции слушателя выбирать, действовать ли только с уведомлениями, которые были отображены моей надстройкой, и/или только с подмножеством тех, которые я отображаю, или выполнять другие действия в зависимости от того, почему я отобразил уведомление.
Причина, по которой у вас возникли проблемы с выяснением того, что не работает, вероятно, заключается в том, что вы не свели проблему к минимуму, необходимому для демонстрации проблемы. Другими словами, было бы неплохо просто попробовать открыть новый URL-адрес отдельно от прослушивателя уведомлений onClicked и просто попробовать console.log()
внутри прослушивателя.
person
Makyen♦
schedule
09.06.2016