Как закрыть текущую вкладку расширения?

#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 в параметры запроса, чтобы это сработало.