Закрытие всплывающего окна, созданное расширением Google Chrome
-
08-10-2019 - |
Вопрос
Я пытаюсь создать хромированное расширение, которое является заменой для вкусной книжки. Я знаю, что уже есть расширение, которое делает это, но проблема с этим расширением состоит в том, что после закладки сайт всплывающее окно остается открытым (в отличие от использования в книжном окне, где всплывающее окно закрывается после подачи формы. Я воссоздал Расширение и побежали в ту же проблему.
Вот мой код:
Mainesest.json:
{
"name": "Delicious",
"version": "1.0",
"description": "Bookmark a site on Delicious",
"background_page": "background.html",
"permissions": [
"tabs"
],
"browser_action": {
"default_icon": "delicious.png"
},
"content_scripts": [
{
"matches": ["http://www.delicious.com/save*"],
"js": ["contentscript.js"]
}
]
}
background.html:
<html><script>
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.getSelected(null, function(tab) {
w = window.open('http://delicious.com/save?url='+
encodeURIComponent(tab.url)+
'&title='+encodeURIComponent(tab.title)+
'&v=5&noui=1&jump=close',
'deliciousuiv5',
'location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550');
});
});
</script></html>
contentscript.js:
if (document.URL == 'http://www.delicious.com/save')
{
alert('closing...');
self.close();
alert('should have closed by now');
}
Когда я нажимаю в вкусную кнопку, всплывающее окно всплывает хорошо, и я могу сохранить закладку, но после нажимания «Создание», всплывающее окно не закрывается. Оба оповещения отображаются, но self.close()
Кажется, ничего не делает. Когда я удаляю проверку URL в ContentScript.js, всплывающее окно появляется как обычно, первое предупреждение сразу, а затем всплывающее окно закрывается (как оно должно).
Почему эта работа не работает? Это не похоже, что Chrome не позволяет мне делать самостоятельно .Close (). Вкусно это что-то делать? Это что-то еще?
Файлы здесь, если вы хотите их: [Ссылка удалена, потому что Drop.io вышел из бизнеса
Решение
Пытаться window.close()
, но это, вероятно, тоже не будет работать.
Как вы создаете обычное окно (а не во всплывающем окне Browser Action), то вы можете закрыть его, используя chrome.tabs.remove()
с фона страницы. Вы также можете обнаружить это окно с фоновой страницы. Что-то типа:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if(changeInfo.status == "loading") {
if(tab.url == "http://www.delicious.com/save") {
chrome.tabs.remove(tabId);
}
}
});
Я не уверен, как Chrome обрабатывает созданные окна, хотя - как вкладки или окна. Если в качестве Windows, то выше кода будет немного отличаться.
Другие советы
Я нашел очень легкую работу вокруг этого. Вы просто устанавливаете выбранную вкладку в True, и всплывающее окно исчезает, как это ...
// remove popup by selecting the tab
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.update(tab.id, { selected: true } )
});
Я нашел это решение: chrome.tabs.update({ active: true });
Эта единая строка кода закрывает всплывающее окно действие браузера. Вам даже не нужно проходить в Tab.id там, потому что по умолчанию он устанавливается на идентификатор текущей вкладки. Я бегу в фоновую страницу, но кажется, что ее можно бежать везде в расширении.
получить не работать на меня, поэтому я нашел это решение
chrome.tabs.create({url: 'https://www.google.com', active: false});
в background.js вам нужно просто
window.close();