Событие onBrowserClose для расширения Google Chrome?
Я разрабатываю расширение для Google Chrome. Мой фон script, каждый раз, авторизуется на сервере, который использует XMPP API, и подписывается на PubSub node. Мне нужно отменить подписку на выходе, иначе фиктивные подписки останутся на сервере. Есть ли какое-либо событие onBrowserClose
в API расширений Google Chrome?
Ответы
Ответ 1
В API расширения Chrome нет такого события.
Однако существует событие chrome.windows.onRemoved
, которое срабатывает при каждом закрытии окна. Я решил, что вы можете проверить это событие, если вы закрыли последнее окно, но, к сожалению, из-за асинхронного характера Chrome это не работает.
Я попытался выполнить простой запрос AJAX в обработчике событий onRemoved
. Запрос AJAX никогда не попадал на сервер, поскольку Chrome уже закрылся перед запуском события (или просто проигнорировал его).
Сделать окончательный ответ: Нет, в настоящее время вы не можете, насколько я знаю. Возможно, вы захотите опубликовать следующий отчет об ошибке в http://crbug.com/30885, чтобы получать уведомления об обновлениях.
Ответ 2
Если вы поймаете случай, когда количество открытых вкладок равно 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 при удалении вкладки и запуск вашего браузера при закрытии обработчика событий, если 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();
});
Ответ 3
Это работает для меня:
chrome.windows.onRemoved.addListener(function(windowId){
alert("!! Exiting the Browser !!");
});
Требуется chrome.windows
, а не chrome.tabs
.
Ответ 4
TL; DR: Попробуйте window.onunload
событие, оно работает в некоторых случаях.
Как уже упоминалось ранее, мы обычно не можем обрабатывать что-то вроде события onBrowserClose
и препятствовать закрытию браузера. Но для некоторых случаев мы можем использовать событие window.onunload
для выполнения чего-то синхронно, и оно работает, если оно действительно синхронно.
По моему опыту вы можете по крайней мере:
- Сохраните некоторую информацию в (например, журналах) в HTML5
localStorage
(которая является синхронной).
- Вызов некоторых асинхронных функций API расширения Chrome, но вы не можете получить результат. (Это работает для меня! Yay!)
- Выполнять синхронный XMLHTTPRequest (да, иногда он работает).
Ответ 5
Добавление события закрытия браузера - довольно частый запрос. Star http://crbug.com/30885 для обновлений. И прочитайте отчет об ошибке для умного взлома, чтобы обнаружить, когда браузер выключен нажатием клавиши.