看來問題在於您試圖以不起作用的方式打開新的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的source code以查看確實實施了什麼以及何時添加。
說明:這可與chrome.notifications.onClicked
或browser.notifications.onClicked
一起使用。但是,不要同時使用兩個添加兩個單獨的匿名函數來執行相同的操作,這會導致您正在執行的操作發生兩次。
我沒有真正用你的代碼來測試它,但我用notify-link-clicks-i18n WebExtensions example的修改版本進行了測試。我從例如修改背景的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 is possible是提供一個唯一的ID,這兩個標識的通知被顯示偏好我的插件和通知是什麼。這允許偵聽器功能選擇僅對通過我的插件顯示的通知和/或僅顯示那些我所顯示的子集的通知,或者根據我顯示通知的原因採取不同的操作。
你在這裏弄清楚什麼不起作用的原因可能是因爲你沒有將問題降低到證明問題所需的最低限度。換句話說,嘗試單獨從通知onClicked偵聽器中單獨打開一個新URL並嘗試在偵聽器中嘗試一個console.log()
是個不錯的主意。
這種類型的更新需要在這個問題,而不是作爲一個答案。作爲答案,它最終會被刪除,因爲它實際上並沒有試圖回答這個問題。 – Makyen
正如我在我的回答中提到的,請使用[Firefox Nightly](https://nightly.mozilla.org/)進行測試,目前爲Firefox 50.0a1。在測試中,我沒有使用當前版本的Firefox開發人員版Firefox 48.0a2正常工作。 WebExtensions API正在積極開發中。當使用它時,它不像您期望的那樣工作,您至少需要使用Firefox Nightly進行測試,因爲它將包含最新的代碼。 – Makyen
您不應該使用* both *'browser.notifications.onClicked.addListener()'和'chrome.notifications.onClicked.addListener()'。只使用一個或另一個。正如你的代碼所示,當正常工作時,每次單擊通知時,最終都會在「http:// www.google.com」中打開兩個新選項卡。 – Makyen