Does onbeforeunload event trigger for popup.html in a google chrome extension? Does onbeforeunload event trigger for popup.html in a google chrome extension? google-chrome google-chrome

Does onbeforeunload event trigger for popup.html in a google chrome extension?


"beforeunload" is not fired for browser action popups. Believe me, I tried. "unload" should be fired correctly, however, so listen for that.

Actually, I have a similar system in place, that allows you to attach events using addEventListener, and they are automagically cleaned up when the unload event fires.

Here's a little tip: obviously you can't use console.log, because by the time the unload event fires, it's already too late. But, you can do this:

var background = chrome.extension.getBackgroundPage();addEventListener("unload", function (event) {    background.console.log(event.type);}, true);

By using the above code, you can open up the background page's console, which should show that the unload event is fired correctly.


I've had a kind of similar issue.In my case, I've set the focus on an element which was in the popup page.So when the popup is closed, the element lose the focus and I can catch the blur event.


If you've switched to using event pages instead of background pages in your extension, the recommended way of getting access to it is calling chrome.runtime.getBackgroundPage() with a function that gets called back with the background page reference.

However, if you try to get the background page in an onbeforeunload handler, like this:

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

The callback doesn't seem to fire before the page unloads, so that log() call is never made.

In a comment above, Pauan suggested using chrome.extension.getBackgroundPage() to get the page. The only way I could get that to work was not to create the handler with addEventListener(). Instead I had to go old school and set the handler directly on window:

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

That finally got through to the background page.