2010-02-23 26 views
15

我正在寫一個帶有彈出窗口和背景頁面的Google Chrome擴展。彈出窗口訂閱了背景生成的某些事件,並且我想在彈出窗口消失時取消訂閱這些事件。但是,我沒有看到從彈出窗口生成onbeforeunload或onunload事件。這些事件是否被解僱?如果沒有,關於如何捕捉彈出關閉的任何想法?onbforeunload事件是否觸發google.hrome擴展中的popup.html?

+1

我有這個確切的問題。你有沒有找到答案? – 2010-05-17 15:53:38

回答

1

我有過類似的問題。 就我而言,我將焦點放在彈出頁面中的元素上。 所以當彈出窗口關閉時,元素失去焦點,我可以捕捉模糊事件。

+0

這個竅門對我不起作用 - 真的很有希望 - 但是沒有去。 – 2014-01-16 22:15:24

30

「beforeunload」爲而不是因瀏覽器動作彈出窗口而被解僱。相信我,我試過了。但是,「卸載」應該正確啓動,所以請仔細閱讀。

實際上,我有一個類似的系統,它允許您使用addEventListener附加事件,並且在unload事件觸發時自動清理它們。

以下是一個小建議:顯然,您不能使用console.log,因爲在卸載事件觸發時,已經太晚了。但是,你可以這樣做:

var background = chrome.extension.getBackgroundPage(); 

addEventListener("unload", function (event) { 
    background.console.log(event.type); 
}, true); 

通過使用上面的代碼,你可以打開後臺頁面的控制檯,這應該表明卸載事件被解僱正確。

+0

感謝您的後臺控制檯提示!非常有用! – 2011-08-09 17:57:47

+0

@AlexStack我恢復了你的編輯。 'chrome.runtime.getBackgroundPage'不等於 - 它是異步的。 – Xan 2015-03-29 19:08:02

+0

至少有一個事件頁面,並使用'chrome.runtime.getBackgroundPage()'來調用背景頁面來記錄某些東西,但是我沒有看到這個工作用於'卸載'事件。 – jdunning 2017-11-02 02:39:03

0

如果您已經切換到使用event pages而不是您的擴展中的後臺頁面,推薦訪問該方法的方式是調用chrome.runtime.getBackgroundPage(),該函數使用後臺頁面引用回調函數。

然而,如果你試圖讓背景頁在onbeforeunload處理,像這樣:

document.addEventListener("beforeunload", function() { 
    chrome.runtime.getBackgroundPage(function(backgroundPage) { 
     backgroundPage.log("unloading"); 
    }); 
}); 

回調似乎不火的頁面卸載之前,讓log()調用從未。

在上面的評論中,Pauan建議使用chrome.extension.getBackgroundPage()來獲取頁面。我唯一能夠實現這個目標的方法不是創建addEventListener()的處理程序。相反,我不得不去老學校,直接在window設置處理:

window.onbeforeunload = function() { 
    chrome.extension.getBackgroundPage().log("unloading"); 
}; 

終於撥通了背景頁。

相關問題