如何从Firefox添加特定选项卡的缓存历史记录?

时间:2014-03-16 20:00:49

标签: firefox firefox-addon firefox-addon-sdk

我正在学习如何使用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,但我没有想出任何明确的方法来获取特定标签的历史记录。我错过了什么?

1 个答案:

答案 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('***')
}