我正在学习如何使用addon-sdk(jetpack)构建Firefox附加组件。在最初的示例中,有一种非常明确的方法可以访问所有打开的选项卡的选项卡对象
var widget = require("sdk/widget").Widget({
id: "mozilla-link",
label: "Mozilla website",
contentURL: "http://www.mozilla.org/favicon.ico",
onClick: listTabs
});
function listTabs() {
var tabs = require("sdk/tabs");
for each (var tab in tabs)
console.log(tab.url);
}
从那里我可以添加听众等。我真正想要的是访问每个标签的历史记录,看看它之前的页面或之后的页面(如果存在)。
我一直在通过documentation,我已经了解了BFCache,但我没有想出任何明确的方法来获取特定标签的历史记录。我错过了什么?
答案 0 :(得分:2)
Tab
模块返回的tabs
实例不允许我们执行此类高级操作,因此必须访问与Add-on SDK选项卡关联的XUL选项卡对象。理想情况下,这将作为一个属性(xultab
任何人?)提供给我们。由于情况并非如此,我们必须即兴发挥。
Add-on SDK选项卡的id
属性可以跟踪关联的XUL选项卡。一旦我们有了这个,标签的会话历史就在眼前。
const { getTabs, getTabId, getBrowserForTab } = require('sdk/tabs/utils');
const { activeTab } = require('sdk/tabs');
function getXULTabFromId(id){
var tabs = getTabs();
return tabs.find(function(tab){
return id == getTabId(tab) ? true : false;
});
}
// Assuming the following code runs inside the onclick handler of a widget
var xultab = getXULTabFromId(activeTab.id);
var browser = getBrowserForTab(xultab);
var sessionHistory = browser.webNavigation.sessionHistory;
var count = sessionHistory.count;
for(var i = 0; i < count; i++){
var entry = sessionHistory.getEntryAtIndex(i, false);
if(sessionHistory.index == i) console.log('***');
console.log(entry.title + ' - ' + entry.URI.spec);
if(sessionHistory.index == i) console.log('***')
}