Событие onBrowserЗакрыть расширение Google Chrome? - PullRequest
17 голосов
/ 02 августа 2010

Я разрабатываю расширение для Google Chrome.Мой фоновый скрипт каждый раз авторизуется на сервере, который использует API-интерфейс XMPP, и подписывается на узел PubSub.Мне нужно отписаться при выходе, иначе фиктивные подписки останутся на сервере.Есть ли событие onBrowserClose в API расширений Google Chrome?

Ответы [ 5 ]

11 голосов
/ 02 августа 2010

В API расширений Chrome такого события нет.

Однако есть событие chrome.windows.onRemoved, которое срабатывает каждый раз, когда окно закрывается. Я подумал, что вы можете проверить в этом случае, если вы закрыли последнее окно, но, к сожалению, из-за асинхронной природы Chrome это не работает.

Я пытался запустить простой AJAX-запрос в обработчике событий onRemoved. Запрос AJAX никогда не поступал на сервер, поскольку Chrome уже закрылся перед запуском события (или просто проигнорировал его).

Окончательный ответ будет таким: Нет, на данный момент вы не можете , насколько я знаю. Возможно, вы захотите пометить следующий отчет об ошибке на http://crbug.com/30885, чтобы получать уведомления об обновлениях.

6 голосов
/ 03 сентября 2010

Если вы обнаружите случай, когда количество открытых вкладок равно 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 при удалении вкладки и запустите обработчик события onclose вашего браузера, если 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 голосов
/ 20 сентября 2012

Это работает для меня:

chrome.windows.onRemoved.addListener(function(windowId){
  alert("!! Exiting the Browser !!");
});

Требуется chrome.windows вместо chrome.tabs.

2 голосов
/ 02 августа 2010

Добавление события закрытия браузера - довольно частый запрос. Звезда http://crbug.com/30885 для обновлений. И прочитайте отчет об ошибке, чтобы узнать, когда браузер закрывается нажатием клавиши.

1 голос
/ 23 октября 2015

TL; DR: Попробуйте window.onunload событие, оно работает в некоторых случаях.

Как упоминалось ранее, мы обычно не можем обработать что-то вроде onBrowserClose и предотвратить закрытие браузера. Но в некоторых случаях мы можем использовать событие window.onunload для выполнения чего-либо синхронно , и оно работает, если оно действительно синхронно .

Из моего опыта вы можете, по крайней мере:

  • Сохранение некоторой информации в (например, журналах) в формате HTML5 localStorage (что является синхронным ).
  • Вызвать некоторые асинхронные функции API расширения Chrome, но вы не можете получить результат. (У меня работает! Ууу!)
  • Выполнить синхронно XMLHTTPRequest (да, иногда это работает).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...