Google Chrome拡張機能によって作成されたポップアップウィンドウを閉じます
-
08-10-2019 - |
質問
おいしいブックマークレットの代替品である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();