2011-06-18 12 views
0

Google Chromeの拡張機能を書いています。Google Chromeの拡張子から2つの連続するタブを閉じる

ターゲットサイトで検索ページを開くと、新しいタブでdetailPageを開くためにバックグラウンドページにリクエストを送信するコンテンツスクリプトが挿入されます。 detailPageが開かれると、コンテンツ・スクリプトが挿入され、バックグラウンド・ページに要求を送信して新しいタブでmessagePageを開きます。 messagePageを開くと、メッセージを送信してmessagePageタブを閉じるコンテンツスクリプトが挿入されます。ここまでは順調ですね。フォーカスはdetailPageタブに戻されます。

どのようにdetailPageを閉じるには? messagePageにあったスクリプトはなくなりました。 detailPage内のスクリプトはアイドルです。私は背景がdetailPageタブとmessagePageタブの両方を閉じる必要があると思います。私は2つの連続したchrome.tabs.removeコマンドを試してみましたが、このコードは、単にハング:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    if (request.cmd == "closeMessage") { 
     chrome.tabs.getSelected(null, function (tab) { 
     chrome.tabs.remove(tab.id); 
     chrome.tabs.getSelected(null, function (tab) { 
     chrome.tabs.remove(tab.id); 
     }); 
    } 
}); 

これが「closeMessage」CMDを受信したときにアクションの一部である必要があります私には思えます。しかしどうですか?もしそうでなければ、どうですか?

私は、送信者のtab.idがsender.tab.idとして返されることを理解しています。これにアクセスしてそれを使ってdetailPageを閉じることはできませんか?

+0

タブの隅にある小さなXを押すようにメッセージをポップアップします。 – Mattis

答えて

1

これらの2つのタブをバックグラウンドページから作成するときは、そのIDを保存します。その後、後で簡単に閉じることができます。

var detailTabId = null; 
var msgTabId = null; 
... 
chrome.tabs.create({url: "detail.html"}, function(tab){ 
    detailTabId = tab.id; 
}); 
... 
chrome.tabs.create({url: "message.html"}, function(tab){ 
    msgTabId = tab.id; 
}); 
... 
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    if (request.cmd == "closeMessage") { 
     chrome.tabs.remove(detailTabId); 
     chrome.tabs.remove(msgTabId); 
    } 
}); 
関連する問題