2016-08-15 56 views
0

我正在學習Chrome擴展的事件頁面,並且根據文檔,這些腳本只會在需要時加載。然後我發現Google Mail Checker的活動頁面腳本將添加事件偵聽器:在Chrome擴展的事件頁面中重複添加事件偵聽器可以嗎?

// Some declarations 

chrome.browserAction.onClicked.addListener(goToInbox); 

// ... 

我寫事件腳本:

chrome.tabs.create({url: 'https://www.google.com'}); 

function onClickListener() { 
    chrome.tabs.create({url: 'https://www.bing.com'}); 
} 

chrome.browserAction.onClicked.addListener(onClickListener); 

後,我重新裝我的分機,谷歌的新標籤。 com按預期開放。幾秒鐘後,Chrome的任務管理器中我的擴展程序就沒有了,我點擊了擴展名圖標。然後,google.com和bing.com都會打開!所以我知道這整個腳本會重新加載。

現在回頭看看Google Mail Checker的腳本。一旦腳本加載後,監聽器會重複添加,所以我的問題是:可以重複添加監聽器嗎?如果在加載腳本時偵聽器的行爲將從A更改爲B,那麼將在第二次加載A或B時觸發哪一個?

回答

1

事實上,您的問題在邏輯上是不可能的,因爲documentation已經聲明,事件監聽器將只存在於事件頁面的上下文中,這意味着一旦事件頁面被卸載,它將被自動移除。因此,在某種程度上,可以重複添加監聽器,儘管實際上您只添加了一次。

因爲聽衆自己只在活動頁面的上下文中存在,則必須使用addListener每次活動頁面加載

和Chrome還指出,在best practices when using event pages

第一線

註冊以在每次加載活動頁面時接收您的分機感興趣的任何事件。事件頁面將爲您的擴展的每個新版本加載一次。之後,它只會被加載以提供您已註冊的活動。這通常意味着您的事件偵聽器應該添加到事件頁面的頂級範圍,否則當事件頁面重新加載時它們可能不可用。

+0

如果所有偵聽器都被銷燬,chrome如何知道腳本何時應該重新加載?我猜chrome有一個由擴展註冊的事件列表,當事件被觸發時,chrome會重新加載腳本並在事件監聽器存在的情況下調用事件監聽器。 – Perqin

相關問題