在我的firefox sdk插件中,我想使用我的数据目录中的自定义网页作为我的设置/关于页面。
但是我无法在标签上看到标签!
所以我有一个按钮,调用OptionsPanel()
功能在新标签页中打开我的网页。现在,我希望如果用户忘记该选项卡已打开并再次按下该按钮,则会激活已打开的设置选项卡。这意味着我需要知道标签是打开的,我需要能够切换到它,如果它是OR打开它,如果它还没有打开。
这是我到目前为止所提出的,但它不起作用;它只是总是打开一个新标签。我甚至都不知道我是不是正在吠叫树。
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;
}
所以,这是我的目标:
答案 0 :(得分: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();
}
}