Включает ли onbeforeunload триггер события popup.html в расширении google chrome?
Я пишу расширение google chrome со всплывающей и фоновой страницей. Всплывающее окно подписывается на определенные события, которые генерирует фон, и я хотел бы отказаться от подписки на эти события, когда всплывающее окно исчезнет. Однако я не вижу, чтобы из всплывающего окна генерировались события onbeforeunload или onunload. Эти события уволены? Если нет, какие-либо идеи о том, как закрыть всплывающее окно?
Ответы
Ответ 1
"beforeunload" не, запущен для всплывающих окон действия браузера. Поверь мне, я попробовал. "Выгрузка" должна быть запущена правильно, однако, послушайте это.
На самом деле, у меня есть аналогичная система, позволяющая присоединять события с помощью addEventListener, и они автоматически очищаются при возникновении события разгрузки.
Вот немного подсказки: очевидно, вы не можете использовать console.log
, потому что к тому времени, когда срабатывает событие разгрузки, это уже слишком поздно. Но вы можете это сделать:
var background = chrome.extension.getBackgroundPage();
addEventListener("unload", function (event) {
background.console.log(event.type);
}, true);
Используя приведенный выше код, вы можете открыть консоль фоновой страницы, которая должна показать, что событие разгрузки запущено правильно.
Ответ 2
У меня была подобная проблема.
В моем случае я сосредоточил внимание на элементе, который был на всплывающей странице.
Поэтому, когда всплывающее окно закрыто, элемент теряет фокус, и я могу поймать событие размытия.
Ответ 3
Если вы переключились на использование страниц событий вместо фоновых страниц в своем расширении, рекомендуемым способом получения доступа к нему является вызов chrome.runtime.getBackgroundPage()
с функцией, которая получает обратный вызов с ссылкой на справочную страницу.
Однако, если вы попытаетесь получить фоновый рисунок в обработчике onbeforeunload
, например:
document.addEventListener("beforeunload", function() {
chrome.runtime.getBackgroundPage(function(backgroundPage) {
backgroundPage.log("unloading");
});
});
Обратный вызов, похоже, не срабатывает до выгрузки страницы, поэтому вызов log()
никогда не выполняется.
В приведенном выше комментарии Пауан предложил использовать chrome.extension.getBackgroundPage()
для получения страницы. Единственный способ, с помощью которого я мог работать, заключался не в создании обработчика с addEventListener()
. Вместо этого мне пришлось пойти в старую школу и установить обработчик непосредственно на window
:
window.onbeforeunload = function() {
chrome.extension.getBackgroundPage().log("unloading");
};
Это, наконец, дошло до фоновой страницы.