我使用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文件时不会执行该函数。
如何让此标签在页面启动时具有与按钮单击相同的行为?
答案 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;