2013-10-24 69 views
4

如何唯一標識當前爲所有使用javascript的主流瀏覽器打開的單獨瀏覽器窗口?讓我解釋什麼,我需要知道,讓我們考慮以下情況:如何識別當前打開的每個單獨的瀏覽器窗口?

我有3個瀏覽器窗口[任何現代的瀏覽器,即瀏覽器,Firefox等]當前打開的,每個都包含多個選項卡。

  • 窗口#1:3個標籤[選項卡A,選項卡B,和Tab C]
  • 窗口#2:2個翼片[索引d和Tab E]
  • 窗口#3:4個標籤[標籤F,Tab G,Tab H和Tab I]

如何唯一標識每個瀏覽器窗口[ie爲每個瀏覽器窗口捕獲唯一的ID /值,而不是標籤的窗口]?所以,最後我會有3個ID [所有窗口],而不是9個ID [所有標籤]。我可以通過創建一個使用jQuery [crossrider]的瀏覽器插件或擴展來識別窗口中的所有選項卡,但無法找到唯一標識每個窗口的方法。

這可能由JavaScript/JQuery的?如果是這樣,怎麼樣?如果不是,爲什麼?

我試過 「window.name」 在JavaScript中,但是這給了我9點的ID,而不是3組的ID。

+0

我不是很清楚你爲什麼要識別窗口,什麼是用例?現代瀏覽器通常將標籤視爲窗口(以前稱爲「許多打開的窗口」現在是「許多打開的標籤」),並將它們作爲單獨的過程來實現。所以,真的,你只需要從你的評論中可以看出你已經設法獲得的標籤身份。 [免責聲明]我是Crossrider的員工 – Shlomo

+1

感謝您的幫助。我想通過用戶按鈕點擊將用戶的瀏覽會話[當前打開的窗口和標籤]保存到雲/服務器,以便用戶可以離開/關閉他/她的瀏覽器/計算機,再次返回並開始瀏覽他/她離開。例如,當Chrome崩潰時,它會記住用戶的上一次會話,並在崩潰前重新打開所有窗口和標籤,以便用戶不必重新打開它們。在這種情況下,我不想在1窗口中保存/打開9個選項卡,但在窗口#1中選擇3個選項卡,在窗口2中選擇2個選項卡,並在窗口3中選擇4個選項卡。 – Ali007

+1

有很多擴展/插件的場景,其中窗口跟蹤非常重要,我認爲Crossrider應該更新其API以支持瀏覽器窗口識別 –

回答

2

據我所知,這不能與當前Crosssrider API來完成!

您必須切換回非跨瀏覽器插件實施,
,以便您針對每個您定位的瀏覽器實施單獨的擴展。

例如在擴展,使用chrome.windows.getAll功能

chrome.windows.getAll(object getInfo, function callback) 

獲得Windows的所有情況下,您會數數,識別每一個。 例如:

chrome.windows.getAll({populate : true}, function (window_list) { 
    var count = window_list.length; // You now have their count 
    for(var i=0; i<count; i++) { 
     var myWindow = window_list[i]; 
     // Do whatever you want here ! 
    } 
}); 

而且不要忘記標籤清單中的權限!

{ 
    ... 
    "permissions": ["tabs"], 
    ... 
} 


火狐插件,使用nsIWindowMediator類,調用它的getEnumerator方法

var windowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"] 
        .getService(Components.interfaces.nsIWindowMediator); 
var enumerator = windowMediator.getEnumerator(null); // returns an iterator of all windows 
var count = 0; 
while (enumerator.hasMoreElements()) { 
    var myWindow = enumerator.getNext(); 
    count++; 
    // Do whatever you want here ! 
} 
// You now have their count 


而對於Safari瀏覽器擴展,可以使用safari.application.browserWindows打開的所有窗口的數組,得到例如

var count = safari.application.browserWindows.length; // You now have their count 
for(var i=0; i<count; i++) { 
    var myWindow = safari.application.browserWindows[i]; 
    // Do whatever you want here ! 
} 
+0

你能使用普通的javascript或jQuery獲取/設置瀏覽器窗口的任何值[即window.name]嗎?真的只是爲了辨認窗戶或將它們區分開來嗎? – Ali007

+0

感謝您的幫助。有趣的是,你沒有提到IE ...... ;-) – Ali007

+1

你只能獲取/設置每個窗口API中可用的字段的值作爲gettable/settable字段(注意有些字段是隻讀的),所以你必須檢查窗口對象,並首先檢查該字段(適用於您的應用程序邏輯)是否可訪問以及它的gettable/settable(API文檔的鏈接在上面的答案中提供) –

相關問題