24

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

これが私のコードです:

マニフェスト.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()の実行を妨げているようには見えません。Deliciousは何かをしていますか?それは何か他のものですか?

必要に応じてファイルはここにあります:[drop.ioが廃業したためリンクが削除されました]

4

4 に答える 4

19

を試してみてください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の場合、上記のコードは少し異なります。

于 2010-10-16T22:13:22.130 に答える
9

これに対する非常に簡単な回避策を見つけました。選択したタブを True に設定すると、このようにポップアップが消えます...

// remove popup by selecting the tab
chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.update(tab.id, { selected: true } )
});
于 2010-11-12T05:11:09.460 に答える
0

私はこの解決策を見つけました:chrome.tabs.update({ active: true });この 1 行のコードは、ブラウザー アクションのポップアップ ウィンドウを閉じます。デフォルトでは現在のタブの id に設定されているため、そこに tab.id を渡す必要さえありません。バックグラウンドページで実行しましたが、拡張機能のどこでも実行できるようです。

于 2013-07-25T20:41:41.067 に答える