質問

おいしいブックマークレットの代替品であるChrome拡張機能を作成しようとしています。私はすでにそれを行う拡張機能があることを知っていますが、その拡張機能の問題は、サイトをブックマークした後、ポップアップウィンドウが開いたままであることです(フォームを送信した後にポップアップが閉じるブックマークレットを使用するのではなく、私は再作成しました。拡張と同じ問題に遭遇しました。

これが私のコードです:

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() 何もしていないようです。 contentscript.jsのURLチェックを削除すると、ポップアップが通常どおりに表示され、最初のアラートがすぐに発火し、ポップアップがそれ自体を閉じます(必要な場合)。

なぜこれが機能しないのですか? ChromeがSelf.close()を行うことを妨げているようには見えません。おいしいことをしていますか?それは何か他のものですか?

ファイルが必要な場合はここにあります:[drop.ioが廃業したためにリンク削除

役に立ちましたか?

解決

試す 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が作成されたWindowsをどのように扱うかはわかりません。 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 }); この1行のコードは、ブラウザアクションのポップアップウィンドウを閉じます。タブを渡す必要はありません。デフォルトでは現在のタブのIDに設定されているためです。バックグラウンドページで実行しますが、拡張機能のどこでも実行できるようです。

私のために働いていないことを選択したので、私はこの解決策を見つけました

chrome.tabs.create({url: 'https://www.google.com', active: false});

background.jsでは必要です

window.close();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top