2014-03-04 40 views
0

我已经使用addon SDK制作了一个插件。该插件增加了一个按钮,导航栏,并且点击时它使用类似于此代码打开了一些数据的新标签从内部索引资料:在Firefox启动时加载附加HTML页面

// 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并再次打开它,该选项卡将被恢复,但它将不包含任何内容,因为它没有被插件按钮点击触发。这是因为页面上的脚本通过main.js中的runScript函数加载,该函数在重新启动时加载HTML文件时不会执行。

如何让此选项卡在页面启动时具有与点击按钮时相同的行为?

+0

显示了用于恢复的标签是什么网址? – willlma

+0

资源://jid1-gzlhtgbcb5hzka-at-jetpack/myextension/data/index.html – GiantSquid

回答

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'); */ 
    } 
    // ... 
} 
+0

Taht工作就像一个魅力,非常感谢你! – GiantSquid

+1

我的荣幸。我编辑了答案(把tab.on改成了tab.once,这样runScript只被调用一次,否则你的脚本会被注入到你在该选项卡中导航到的每个页面中,直到你关闭它为止。 – willlma

-1

这我已经报告说,它前一段时间上的Bugzilla here

的错误我加了你的话题作为一个例子。

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

例如就绪:

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

感谢您的回答,但我不明白这会有什么帮助。 'onReady'永远不会执行,因为这发生在addon脚本一侧,而这在启动时加载HTML页面时不会执行。 – GiantSquid

+0

我不知道sdk。无论哪个事件触发该标签页完成加载后,然后运行此代码。 – Noitidart

+0

它使空白的原因是当你使用addon sdk制作一个新选项卡时,它会打开:空白并用你的html填充它。如果你想要非SDK版本,我可以给你一个你想看到的例子吗?上传你的插件的xpi,我会给你一个演示非sdk – Noitidart