我正在尝试使用addon-sdk将Chrome插件移植到Firefox,但我找不到用于收听标签导航事件的等效方法。
我需要做的是保持每页数据(从DOM检测到),并在用户导航到选项卡中的新页面时立即删除(但是,在刷新时维护数据)
我是Chrome,要在标签更改网址时执行某些操作,我可以使用:
chrome.tabs.onUpdated.addListener(function(tab_id, changeInfo, tab) {
if(changeInfo.status == 'loading' && changeInfo.url) {
//DO STUFF AS THE URL CHANGED
}
});
在使用addon-sdk的Firefox中,我尝试过使用:
tabs.on('open', function(tab){
tab.on('ready', function(tab){
if(tab.cachedURL != tab.url) {
//DO STUFF AND SET CACHE
}
});
});
问题在于我无法挂钩初始导航事件,所以在开始导航的用户和准备好的新页面的DOM之间,旧数据可用。
基本上我需要一种方法来连接标签的初始导航,理想情况下看看它的位置(就像我在Chrome中一样)。
有什么想法吗?
答案 0 :(得分:11)
目前无法通过标签检测页面加载。但是,你可以使用page-mods中的start事件来完成它。我也有兴趣以正确的方式做到这一点,所以如果你找到一种不使用page-mods的方法,请点击我:
var pageMod = require("page-mod");
pageMod.PageMod({
include: "*", // All DOM windows (ie. all pages + all iframes).
contentScriptWhen: "start", // page starts loading, at this point you have
// the head of the document and no more
contentScript: "", // inject no script, you can even omit this
onAttach: function onAttach(worker) {
if (worker.tab.url == worker.url) // test if at top level
doStuff(worker.tab.url);
// cleanup the attached worker
worker.destroy();
}
}
);
另外,我不知道onAttach触发器的速度,就像在ff扩展中传递的所有消息一样,它可能会增加一些时间(可能是150ms?如果您对此有基准,请回到我身边)< / p>
答案 1 :(得分:0)
据我所知,这应该捕获所有打开标签,在标签之间切换以及在标签内导航的情况。全局变量url
应始终包含活动标签的网址,console.log
调用应记录影响该标记的所有事件。
var tabs = require("sdk/tabs");
var url;
var updateURL = function (tab) {
var oldURL = url;
url = tab.url;
console.log(oldURL+" --> "+url);
};
tabs.on("activate", updateURL);
tabs.on("pageshow", updateURL);
updateURL(tabs.activeTab);