2016-06-09 44 views
0

我正在嘗試使用WebExtensions開發Firefox附加組件。我想要做的是當用戶點擊通知時打開一個新的Firefox標籤或窗口。但它不起作用。Firefox WebExtension通知API:如何在單擊通知時調用函數

當我點擊通知時,沒有任何反應。

我創建相似通知:

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

我怎樣才能使這項工作?

回答

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的source code以查看確實實施了什麼以及何時添加。

說明:這可與chrome.notifications.onClickedbrowser.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()是個不錯的主意。

0

我剛剛更新了我的Firefox 47和重新啓動

我修改我的代碼,這是行不通的。我不明白爲什麼它不打開一個新窗口。其實我的代碼在Chrome中運行良好。

我看到通知。當我點擊,它就會消失,不開擴標籤

let id = "notify-link-clicks-i18n::" + title + "-" + content; 
 
\t var q = chrome.notifications.create(id,{ 
 
\t \t "type": "basic", 
 
\t \t "iconUrl": chrome.extension.getURL("128-128FX.png"), 
 
\t \t "title": 'title', 
 
\t \t "message": 'content' 
 
\t }); 
 
\t 
 
\t browser.notifications.onClicked.addListener(function(notificationId) { 
 
\t \t console.log("qweqweqweqw"); 
 
\t \t browser.tabs.create({url:"http://www.google.com"}); 
 
\t }); 
 
    chrome.notifications.onClicked.addListener(function(notificationId) { 
 
\t \t console.log("qweqweqweqw"); 
 
\t \t browser.tabs.create({url:"http://www.google.com"}); 
 
\t });

+0

這種類型的更新需要在這個問題,而不是作爲一個答案。作爲答案,它最終會被刪除,因爲它實際上並沒有試圖回答這個問題。 – Makyen

+0

正如我在我的回答中提到的,請使用[Firefox Nightly](https://nightly.mozilla.org/)進行測試,目前爲Firefox 50.0a1。在測試中,我沒有使用當前版本的Firefox開發人員版Firefox 48.0a2正常工作。 WebExtensions API正在積極開發中。當使用它時,它不像您期望的那樣工作,您至少需要使用Firefox Nightly進行測試,因爲它將包含最新的代碼。 – Makyen

+0

您不應該使用* both *'browser.notifications.onClicked.addListener()'和'chrome.notifications.onClicked.addListener()'。只使用一個或另一個。正如你的代碼所示,當正常工作時,每次單擊通知時,最終都會在「http:// www.google.com」中打開兩個新選項卡。 – Makyen