API уведомлений Firefox WebExtension: как вызвать функцию при нажатии на уведомление

Я пытаюсь разработать дополнение Firefox с использованием WebExtensions. Я пытаюсь открыть новую вкладку или окно Firefox, когда пользователь щелкает уведомление. Но это не работает.

Когда я нажимаю на уведомление, ничего не происходит.

Я создаю уведомления, такие как:

var q = chrome.notifications.create({
		"type": "basic",
		"iconUrl": chrome.extension.getURL("128-128q.png"),
		"title": 'title',
		"message": 'content'
	});
	
chrome.notifications.onClicked.addListener(function(notificationId) {
    window.open('http://www.google.com');
});
browser.notifications.onClicked.addListener(function(notificationId) {
    window.open('http://www.google.com');
});
	
q.onClicked.addListener(function(notificationId) {
    window.open('http://www.google.com');
});
	
var audio = new Audio('message.mp3');
audio.play();

Как я могу заставить это работать?


person Alper Gündöken    schedule 09.06.2016    source источник


Ответы (1)


Похоже, проблема в том, что вы пытаетесь открыть новый 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