2011-06-18 55 views
0

我正在爲Google Chrome編寫擴展程序。從谷歌瀏覽器擴展中關閉兩個連續的選項卡

當在目標站點上打開搜索頁面時,會注入一個內容腳本,它向後臺頁面發送請求以打開新選項卡中的detailPage。當detailPage打開時,將注入一個內容腳本,它向後臺頁面發送請求以在新選項卡中打開messagePage。當messagePage打開時,會注入一個內容腳本,用於發送消息並關閉messagePage選項卡。到現在爲止還挺好。焦點返回到detailPage選項卡。

但是如何關閉detailPage? messagePage中的腳本消失了。 detailPage中的腳本處於空閒狀態。我想背景必須關閉detailPage選項卡和messagePage選項卡。我試過兩個連續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

當您從背景頁面創建這兩個選項卡時 - 保存它們的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); 
    } 
});