2016-01-17 113 views
1

在我的firefox sdk插件中,我想從我的數據目錄中使用自定義網頁作爲我的設置/關於頁面。如何在特定的選項卡上保留選項卡?

但是我在標籤上留下了一些麻煩!

所以我有一個按鈕,調用OptionsPanel()函數來打開我的網頁在一個新標籤。現在,我希望如果用戶忘記了該選項卡,並且再次按下該按鈕,它會激活已打開的設置選項卡。這意味着我需要知道該選項卡已打開,並且如果它處於打開狀態,則需要能夠切換到該選項卡,如果尚未打開,請將其打開。

這是我到目前爲止,但它不工作;它只是總是打開一個新標籤。我甚至不知道我是否在咆哮着正確的樹。

const tabs = require("sdk/tabs"); 
var optionsTab; 
function OptionsPanel(){ 
    var opsTab = GetTabByID(optionsTab.id); 
    if(opsTab == null){ 
     tabs.open(data.url("OptionsPanel.html")); 
     optionsTab.id = tabs.tab.id; <======errors out as undefined 
    }else{ 
     opsTab.activate(); 
    } 
} 

//return a handle to the tab that matches specified tab id 
function GetTabByID(whatid){ 
    for(let thistab of tabs){ 
     if(thistab.id = whatid){ 
      return thistab; 
     } 
    } 
    return null; 
} 

所以,這裏是我的目標:

  1. 打開我的頁面在一個新的標籤,如果它是尚未打開。
  2. 如果該選項卡已經打開,然後切換到該選項卡。
  3. 如果頁面在瀏覽器加載時打開,則如果用戶按下選項按鈕,則準備切換到該選項卡。

回答

2

爲什麼你會認爲tabs模塊有tab屬性?

通常情況下,您會使用activeTab屬性。但是在調用tabs.open之後它不會立即更新。人們必須改用tabs[tabs.length - 1]

const tabs = require("sdk/tabs"); 
var optionsTabId; 
function OptionsPanel(){ 
    var opsTab = GetTabByID(optionsTabId); 
    if (opsTab == null) { 
     tabs.open(data.url("OptionsPanel.html")); 
     optionsTabId = tabs[tabs.length - 1].id; 
    } else { 
     opsTab.activate(); 
    } 
} 

此外,您在GetTabByID中犯了一個錯誤。

//return a handle to the tab that matches specified tab id 
function GetTabByID(whatid){ 
    for(let thistab of tabs){ 
     if(thistab.id == whatid){ // use == to compare 
      return thistab; 
     } 
    } 
    return null; 
} 

請記住,這是假設無法從選項選項卡中導航。以防萬一,我會檢查optsTab.url


另外,您可以利用標籤事件接口

const tabs = require("sdk/tabs"); 
const OPTIONS_URL = data.url("OptionsPanel.html"); 
var optionsTab = null; 

function OptionsPanel(){ 
    if (optionsTab == null) { 
     tabs.open(OPTIONS_URL); 
     tabs.once('ready', function(tab) { 
      optionsTab = tab; 
      optionsTab.on('ready', function readyListener(tab) { 
       if (tab.url !== OPTIONS_URL) { 
        optionsTab.off('ready', readyListener); 
        optionsTab = null; 
       } 
      }) 
      optionsTab.once('close', function(tab) { 
       optionsTab = null; 
      }) 
     }); 
    } else { 
     optionsTab.activate(); 
    } 
} 
+0

選項卡模塊的可能性「選項卡實例代表一個打開的選項卡。」正如我在標籤實用工具文檔中所看到的:https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/tabs#Tab,但我覺得這有點令人困惑,並且沒有足夠的例子爲了我。 – bgmCoder

+0

感謝您的時間,minj;並指出'=='。我習慣於在Autohotkey中編碼。 – bgmCoder

相關問題