2010-08-02 180 views
14

我正在開發Google Chrome的擴展程序。我的後臺腳本每次都在使用XMPP API的服務器上進行授權,並訂閱PubSub節點。我需要在退出時取消訂閱,否則虛擬訂閱將保留在服務器上。 Google Chrome擴展程序API中是否有任何onBrowserClose事件?針對Google Chrome擴展程序的事件onBrowser關閉?

+1

請記住,瀏覽器還有其他方式可以退出,包括關機和崩潰。即使有100%可靠的方法來檢查瀏覽器正常退出,您仍然有漏洞。 – 2012-09-20 06:59:50

回答

9

Chrome擴展API中沒有這樣的事件。

但是,每當窗口關閉時都會觸發chrome.windows.onRemoved事件。我想你可以檢查這個事件,如果你關閉了最後一個窗口,但不幸的是,由於Chrome的異步性質,這是行不通的。

我試過的是在onRemoved事件處理程序中運行一個簡單的AJAX請求。 AJAX請求從未到達服務器,因爲Chrome在運行事件之前已經關閉(或者只是忽略它)。

做出最終答案爲:不,目前您不能,據我所知。您可能想要在http://crbug.com/30885上發佈以下錯誤報告以獲得關於更新的注意事項。

+0

感謝您的迴應,事實上我決定以舊派的方式,只需保存localstorage中的以前的訂閱信息,並在後臺腳本重新加載時取消訂閱=) – simple 2010-08-02 19:58:45

0

添加瀏覽器關閉事件是一個相當頻繁的請求。明星http://crbug.com/30885的更新。並閱讀錯誤報告,以便通過按鍵檢測瀏覽器何時關機。

4

如果您在打開的選項卡數爲0時發現該情況,則可以將其視爲Chrome onClose事件。就我而言,我必須在Chrome關閉之前取消桌面通知,否則會導致崩潰。 這是我如何做到了:

1.初始化通過使用以下的可變NUM_TABS:
chrome.tabs.getAllInWindow(null, function(tabs){ 
    console.log("Initial tab count: " + tabs.length); 
    num_tabs = tabs.length; 
}); 
2.遞增NUM_TABS創建選項卡時:
chrome.tabs.onCreated.addListener(function(tab){ 
    num_tabs++; 
    console.log("Tab created event caught. Open tabs #: " + num_tabs); 
}); 
3.遞減num_tabs當一個標籤被刪除,並運行你的瀏覽器closeclose事件處理程序如果num_tabs = 0
chrome.tabs.onRemoved.addListener(function(tabId){ 
    num_tabs--; 
    console.log("Tab removed event caught. Open tabs #: " + num_tabs); 
    if(num_tabs == 0) 
     notification.cancel(); 
}); 
+0

這是否甚至給chrome的異步性質,因爲codingbug的答案說? – 2011-12-10 22:52:46

+0

如果你的瀏覽器有一個擴展名,它具有「背景」權限,請參閱這個 - > https://developer.chrome.com/extensions/declare_permissions,即使你認爲它已經存在,chrome也不會退出。你必須明確地終止這個過程,或者強迫退出等等。 – ankitG 2016-04-13 09:15:22

3

這一次爲我的作品:

chrome.windows.onRemoved.addListener(function(windowId){ 
    alert("!! Exiting the Browser !!"); 
}); 

這需要chrome.windows而非chrome.tabs

+2

您可以擁有多個Chrome窗口,每次關閉某個窗口時都會觸發此窗口,而不僅僅是最後一個窗口關閉。 – s3m3n 2013-11-06 16:54:39

1

TL; DR:嘗試window.onunload事件,它適用於某些情況。

正如之前提到的,我們通常無法處理類似onBrowserClose事件並阻止瀏覽器關閉。但是在某些情況下,我們可以使用window.onunload事件同步,並且如果它確實同步,它也可以使用。

從我的經驗,你至少可以:

  • 保存在(例如日誌)的HTML5 localStorage(這是同步)的一些信息。
  • 調用一些異步鉻擴展API函數,但不能得到結果。 (它適用於我!!)
  • 執行同步 XMLHTTPRequest(是的,有時它的工作原理)。