Я разрабатываю расширение для Google Chrome. Мой фоновый скрипт, каждый раз, авторизуется на сервере, который использует XMPP API, и подписывается на узел PubSub. Мне нужно отменить подписку на выходе, иначе фиктивные подписки останутся на сервере. Есть ли какое-либо событие onBrowserClose
в API расширений Google Chrome?Событие onBrowserClose для расширения Google Chrome?
ответ
В Chrome Extension API такого события нет.
Однако есть событие chrome.windows.onRemoved
, которое срабатывает при каждом закрытии окна. Я решил, что вы можете проверить это событие, если вы закрыли последнее окно, но, к сожалению, из-за асинхронного характера Chrome это не работает.
Что я пробовал, выполнял простой запрос AJAX в обработчике событий onRemoved
. Запрос AJAX никогда не попадал на сервер, поскольку Chrome уже закрылся перед запуском события (или просто проигнорировал его).
Выполнение окончательного ответа: Нет, в настоящее время вы не можете, насколько мне известно. Возможно, вы захотите опубликовать следующий отчет об ошибке: http://crbug.com/30885, чтобы узнать об обновлениях.
спасибо за ответ, действительно, я решил пойти по старой школе, просто сохраните предыдущую информацию о подписке в localstorage и отмените ее подписку при перезагрузке фонового скрипта. =) – simple
Добавление события закрытия браузера - довольно частый запрос. Звезда http://crbug.com/30885 для обновлений. И прочитайте отчет об ошибке для умного взлома, чтобы обнаружить, когда браузер выключен нажатием клавиши.
Если вы поймаете случай, когда количество открытых вкладок равно 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();
});
Означает ли это, что даже при асинхронном характере хром возникает проблема, как говорит ответ codingbug? –
Если ваш браузер имеет расширение, имеющее разрешение для «фона», см. Это -> https://developer.chrome.com/extensions/declare_permissions, хром не выйдет, даже если вы считаете, что он имеет. Вы должны явно прекратить процесс или заставить уйти или что-то в этом роде. – ankitG
Это один работает для меня:
chrome.windows.onRemoved.addListener(function(windowId){
alert("!! Exiting the Browser !!");
});
Он принимает chrome.windows
, а не chrome.tabs
.
У вас может быть несколько окон Chrome, и это будет срабатывать при каждом закрытии окна, а не только при закрытии последнего окна. – s3m3n
TL; Пробег window.onunload
Событие, это работает в некоторых случаях.
Как уже упоминалось ранее, мы, как правило, не можем обрабатывать что-то вроде onBrowserClose
события и не позволять браузеру закрываться. Но для некоторых случаев мы можем использовать событие window.onunload
для выполнения чего-то синхронно, и он действительно работает, если он действительно синхронно.
Из моего опыта вы можете по крайней мере:
- Сохранить некоторую информацию (например, журналы) в HTML5
localStorage
(который синхронное). - Вызов некоторых асинхронный Функции API расширения chrome, но вы не можете получить результат. (Это работает для меня! Yay!)
- Выполнить synchronous XMLHTTPRequest (да, иногда это работает).
- 1. indexdb для расширения google chrome
- 2. Доступно событие переключения клавиш для расширения google chrome?
- 3. Offline Расширения Google Chrome
- 4. Разработка расширения Google Chrome
- 5. Пример расширения Google Chrome
- 6. Разработка расширения Google Chrome
- 7. API для перевода Google для расширения Chrome
- 8. Метрики для расширения Chrome
- 9. Относительный путь расширения расширения Google Chrome
- 10. Обновление панели расширения расширения Google Chrome
- 11. Автоматическое тестирование расширения google chrome
- 12. Разработка пользовательского интерфейса для расширения Google Chrome
- 13. Расширения Chrome - ссылка для копирования Google Search
- 14. Написание расширения chrome Google для запроса GET
- 15. Рекомендуемый размер значка для расширения Google Chrome
- 16. Загрузить изображения для расширения google chrome
- 17. Google Chrome для пользователей и расширения?
- 18. Как использовать chrome.alarms для расширения Google Chrome
- 19. Facebook JavaScript API для расширения google chrome
- 20. Разбор поиска из google для расширения Chrome
- 21. Как сохранить настройки для расширения Google Chrome?
- 22. Расширения Google Chrome - онлайн-упаковка
- 23. Автоматизация установки расширения Google Chrome
- 24. Избегайте перезагрузки расширения Google Chrome
- 25. Google chrome - Расширения автоматически удаляются
- 26. Доступны ли расширения расширения Chrome для расширения?
- 27. Событие запуска Google chrome extensions
- 28. Отслеживание событий отслеживания для расширения Chrome
- 29. Установить NativeHost для расширения Chrome
- 30. OAuth2 поток для расширения Chrome
Имейте в виду, что для выхода из браузера есть другие способы выхода, включая отключение питания и сбои. Даже если есть 100% надежный способ проверить, что браузер выходит из обычного режима, у вас все равно будут отверстия. –