#google-chrome-extension
#google-chrome-расширение
Вопрос:
Я пытаюсь закрыть страницу параметров расширения. У меня есть кнопка отмены, и я использую этот код:
chrome.tabs.getCurrent(null, function(tab) {
chrome.tabs.remove(tab.id, function() {});
});
Когда я пытаюсь ее использовать, она всегда выдает эту ошибку:
Uncaught TypeError: Cannot call method 'getCurrent' of undefined
Что не так с кодом?
Ответ №1:
У меня это работает с одним небольшим исправлением:
chrome.tabs.getCurrent(function(tab) {
chrome.tabs.remove(tab.id, function() { });
});
Просто убедитесь, что вы действительно используете этот код на странице настроек вашего расширения, а не просто на какой-то HTML-странице, потому что chrome.tabs API доступен только для расширений.
Комментарии:
1. вам нужны разрешения??
2. только что проверил, что вы этого не делаете
1
3. Я получаю сообщение об ошибке при запуске этого кода в Edge: «Ответ на обработку ошибок: TypeError: не удается прочитать свойство ‘id’ неопределенного».
4. @gornvix GetCurrent не работает на фоновой странице. И getSelected теперь не рекомендуется. Мне пришлось использовать вкладки. запрос. Проверьте ответ Т. Тодуа и мой комментарий
Ответ №2:
Скорее всего, вы запускаете свой код из скрипта содержимого, где chrome.tabs не определен. Если это так, вы можете вместо этого отправить сообщение на фоновую страницу и заставить фоновую страницу (которая имеет доступ к chrome.tabs) выполнить вызов.
Обратите внимание, что на фоновой странице вы бы использовали, chrome.tabs.getSelected
since getCurrent
вернет значение undefined.
Комментарии:
1.
..getSelected
не рекомендуется. developer.chrome.com/extensions/tabs#method-getSelected
Ответ №3:
На странице параметров вы можете просто сделать:
window.close()
Если вы хотите использовать chrome.tabs.getCurrent
, tabs
определено ли это в разделе разрешений в манифесте?
Комментарии:
1. Я знаю, что мог бы использовать window.close (), но я хочу сделать это другим способом. 🙂 Я определил разрешение вкладок.
Ответ №4:
У меня есть время продолжить расширение после очень долгого перерыва. Я снова проверил документацию. Итак, это был встроенный скрипт, который я, вероятно, заблокировал Политикой безопасности содержимого в манифесте, потому что я не совсем точно прочитал документацию.
Теперь Chrome по умолчанию блокирует встроенные скрипты, так что мне все равно придется это исправить.
Ответ №5:
Только это сработало для меня:
chrome.tabs.query({ active: true }, function(tabs) {
chrome.tabs.remove(tabs[0].id);
});
Комментарии:
1. Похоже, что это закрывает случайные вкладки, а не текущую вкладку. Мне пришлось добавить
currentWindow: true
вместе сactive: true
в параметры запроса, чтобы это сработало.