在Firefox启动时加载附加HTML页面

时间:2014-03-04 10:04:41

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

我使用addon SDK制作了一个插件。该插件向导航栏添加了一个按钮,当它被单击时,它会打开一个新选项卡,其中包含来自内部indexeddb的一些数据,使用与此类似的代码:

// main.js
tabs.open({
  url: self.data.url('index.html'),
  onReady: runScript
});

function runScript(tab) {
  var worker = tab.attach({
    contentScriptFile: [
      self.data.url("script.js")]
  });
}

一切正常,除了用户退出Firefox并再次打开它的情况之外,该选项卡将被恢复,但它不包含任何内容,因为它没有被插件按钮点击触发。这是因为页面上的脚本是通过runScript中的main.js函数加载的,在重新启动时加载HTML文件时不会执行该函数。

如何让此标签在页面启动时具有与按钮单击相同的行为?

2 个答案:

答案 0 :(得分:1)

我认为你必须重新加载标签:

exports.main = function(options) {
  if(options.reason==='startup') for (var i=tabs.length-1; i>=0; i--) {
    var tab = tabs[i];
    if (tab.url!==self.data.url('index.html')) continue;
    tab.once('ready', runScript.bind(null, tab));
    tab.reload();
    /* If it can't reload the tab,
    use tab.url = self.data.url('index.html'); */
  }
  // ...
}

答案 1 :(得分:-1)

这是我之前在bugzilla上发布的一个错误here

我添加了您的主题作为示例。

所以你现在需要做的是onReady,你必须将你的身体变成html datauri并将标签的位置设置为这个内容。

例如准备就绪:

var htmlDataUri = 'data:text/html,' + encodeURIComponent(document.documentElement.innerHTML);
//end make htmldatauri
document.location = htmlDataUri;