Закрытие всплывающего окна, созданное расширением Google Chrome

StackOverflow https://stackoverflow.com/questions/3950981

Вопрос

Я пытаюсь создать хромированное расширение, которое является заменой для вкусной книжки. Я знаю, что уже есть расширение, которое делает это, но проблема с этим расширением состоит в том, что после закладки сайт всплывающее окно остается открытым (в отличие от использования в книжном окне, где всплывающее окно закрывается после подачи формы. Я воссоздал Расширение и побежали в ту же проблему.

Вот мой код:

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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top