Подтвердить что ты не робот

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

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

Здесь мой код:

manifest.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-адресов в contentcript.js, всплывающее окно появляется как обычно, первое предупреждение срабатывает сразу, а затем всплывающее окно закрывается (как и должно быть).

Почему это не работает? Не похоже, что Chrome мешает мне делать self.close(). Delicious что-то делает? Это что-то еще?

Файлы здесь, если вы хотите: [ссылка удалена, потому что drop.io вышел из бизнеса]

4b9b3361

Ответ 1

Попробуйте window.close(), но это, вероятно, тоже не сработает.

Когда вы создаете регулярное окно (а не всплывающее окно браузера), вы можете закрыть его с помощью 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 обрабатывает созданные окна - как вкладки или окна. Если в качестве окон, то код выше будет немного отличаться.

Ответ 2

Я нашел очень легкую работу. Вы только установили выбранную вкладку в True, и всплывающее окно исчезнет, ​​как это...

// remove popup by selecting the tab
chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.update(tab.id, { selected: true } )
});

Ответ 3

Я нашел это решение: chrome.tabs.update({ active: true }); Эта единственная строка кода закрывает всплывающее окно действия браузера. Вам даже не нужно пропускать tab.id, потому что по умолчанию он установлен на id текущей вкладки. Я запускаю его на исходной странице, но кажется, что он может быть запущен повсюду в расширении.