我正在開發Google Chrome的擴展程序。我的後臺腳本每次都在使用XMPP API的服務器上進行授權,並訂閱PubSub節點。我需要在退出時取消訂閱,否則虛擬訂閱將保留在服務器上。 Google Chrome擴展程序API中是否有任何onBrowserClose
事件?針對Google Chrome擴展程序的事件onBrowser關閉?
回答
Chrome擴展API中沒有這樣的事件。
但是,每當窗口關閉時都會觸發chrome.windows.onRemoved
事件。我想你可以檢查這個事件,如果你關閉了最後一個窗口,但不幸的是,由於Chrome的異步性質,這是行不通的。
我試過的是在onRemoved
事件處理程序中運行一個簡單的AJAX請求。 AJAX請求從未到達服務器,因爲Chrome在運行事件之前已經關閉(或者只是忽略它)。
做出最終答案爲:不,目前您不能,據我所知。您可能想要在http://crbug.com/30885上發佈以下錯誤報告以獲得關於更新的注意事項。
感謝您的迴應,事實上我決定以舊派的方式,只需保存localstorage中的以前的訂閱信息,並在後臺腳本重新加載時取消訂閱=) – simple 2010-08-02 19:58:45
添加瀏覽器關閉事件是一個相當頻繁的請求。明星http://crbug.com/30885的更新。並閱讀錯誤報告,以便通過按鍵檢測瀏覽器何時關機。
如果您在打開的選項卡數爲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();
});
這是否甚至給chrome的異步性質,因爲codingbug的答案說? – 2011-12-10 22:52:46
如果你的瀏覽器有一個擴展名,它具有「背景」權限,請參閱這個 - > https://developer.chrome.com/extensions/declare_permissions,即使你認爲它已經存在,chrome也不會退出。你必須明確地終止這個過程,或者強迫退出等等。 – ankitG 2016-04-13 09:15:22
這一次爲我的作品:
chrome.windows.onRemoved.addListener(function(windowId){
alert("!! Exiting the Browser !!");
});
這需要chrome.windows
而非chrome.tabs
。
您可以擁有多個Chrome窗口,每次關閉某個窗口時都會觸發此窗口,而不僅僅是最後一個窗口關閉。 – s3m3n 2013-11-06 16:54:39
TL; DR:嘗試window.onunload
事件,它適用於某些情況。
正如之前提到的,我們通常無法處理類似onBrowserClose
事件並阻止瀏覽器關閉。但是在某些情況下,我們可以使用window.onunload
事件同步,並且如果它確實同步,它也可以使用。
從我的經驗,你至少可以:
- 保存在(例如日誌)的HTML5
localStorage
(這是同步)的一些信息。 - 調用一些異步鉻擴展API函數,但不能得到結果。 (它適用於我!!)
- 執行同步 XMLHTTPRequest(是的,有時它的工作原理)。
- 1. 關閉Chrome擴展程序
- 2. Chrome擴展程序:強制popup.html關閉
- 3. Google Chrome擴展程序創建的關閉彈出窗口
- 4. Chrome擴展:Chrome關閉
- 5. Chrome擴展程序和history.onVisited事件
- 6. 登錄Google Chrome擴展程序的AJAX事件
- 7. Chrome擴展程序 - 點擊事件
- 8. Chrome擴展程序 - onclick圖標事件
- 9. 關於Chrome擴展程序的問題
- 10. Google Chrome擴展程序中的Flex
- 11. Chrome擴展程序彈出窗口關閉時是否有事件?
- 12. 使用JavaScript關閉Chrome擴展程序通知
- 13. Google Chrome擴展程序Hello World
- 14. Google Chrome擴展程序save data localy
- 15. Google Chrome擴展程序Http請求
- 16. Chrome擴展程序androidpublisher packageName
- 17. Chrome擴展程序
- 18. Chrome擴展程序:檢測彈出窗口關閉
- 19. Google Chrome瀏覽器擴展:彈出式窗口未關閉
- 20. Chrome擴展關閉或更新標籤
- 21. Chrome擴展程序 - 修改郵件事件的彈出頁面
- 22. Chrome擴展程序 - 解析Gmail郵件
- 23. 在Chrome擴展中訪問瀏覽器事件 - Chrome擴展中的DOM事件
- 24. 有沒有辦法關閉Chrome擴展程序或Firefox插件的源代碼?
- 25. 租用Chrome擴展程序?
- 26. Chrome擴展程序tab.url undefined
- 27. Chrome擴展程序向Google日曆添加事件發生「解析錯誤」
- 28. 防止事件偵聽器在Google Chrome擴展程序中執行
- 29. Chrome擴展程序:新書籤事件的活動頁面
- 30. Chrome擴展程序identity.email空
請記住,瀏覽器還有其他方式可以退出,包括關機和崩潰。即使有100%可靠的方法來檢查瀏覽器正常退出,您仍然有漏洞。 – 2012-09-20 06:59:50