javascript - Firefox 插件 sdk/tabs : "ready" event doesn't fire on all page loads?

标签 javascript firefox-addon-sdk

我正在使用 sdk/tabs 监听页面加载:

require('sdk/tabs').on('ready', function(tab) { console.log(tab.url); } );

它在正常导航期间按预期工作,但在某些使用脚本导航的页面上,“就绪”事件不会触发。例如,加载一个 Flickr 照片页面:

https://www.flickr.com/photos/42559357@N04/14696401803

并使用 GUI 导航(照片两侧的箭头或照片底部的图标)导航到其他照片。选项卡 URL 更改,但从未调用监听器。

这正常吗?有什么方法可以跟踪此类页面加载吗?

ETA:我注意到 sdk/context-menu 没有遇到同样的问题,这给了我一个解决方法的想法:

var cm = require("sdk/context-menu");
cm.Item({
    label: "dummy",
    contentScript: 'self.on("context", function (node) {' +
        '  self.postMessage(document.URL);' +
        '  return false;' +
    '});',
    onMessage: function (pageUrl) {
        console.log(pageUrl);
    }
});

只要在页面上打开上下文菜单,就会触发 onMessage 下的函数,并且像上面描述的那样棘手的页面更改不会混淆脚本:它会准确地记录当前 URL。

碰巧,为页面 URL 定制的上下文菜单正是我的目标,所以这可能对我有用(我将添加 URL 过滤和一种方法来确保每次只传送一次有效负载页)。但我仍然想要原始问题的答案。

ETA2:page-mod 与选项卡有同样的问题:下面将监听 Flickr 上的新页面打开,但不会在通过 Flickr UI 加载新页面时监听:

var pageMod = require("sdk/page-mod");
pageMod.PageMod({
    include: '*.flickr.com',
    contentScriptWhen: 'start',
    contentScript: 'self.port.emit("pageOpened", document.URL);',
    onAttach: function(worker) {
        worker.port.on("pageOpened", function(pageUrl) {
            console.log(pageUrl);
        });
    }
});

最佳答案

我有这个问题。这是因为 Firefox“预加载”了页面,所以它加载了 state="ready"。因此,页面状态没有变化,事件也没有被触发。 为了克服这个问题,我监听了“打开”事件 (tabs.on("open", ...)) 并检查页面是否处于“就绪”状态:

tabs.on("open", function (tab) {
    tab.on("pageshow", doSomething);
    if (tab.readyState == "complete") {
        doSomething(tab);
    }
});

关于javascript - Firefox 插件 sdk/tabs : "ready" event doesn't fire on all page loads?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24842698/

相关文章:

javascript - 关于使用 NodeJs 和 MySQL 的 Web 应用程序中的 MVC 架构模型的问题

javascript - 我怎样才能动态地给出应该对元素执行什么操作?

javascript - 迭代窗口对象的属性时出现异常 "Component is not available"

javascript - 我怎么知道 Axis 上显示的是什么日期?

javascript - 正则表达式在引号外的特定字符上拆分字符串

javascript - React - 我有六个文件导出一个变量,并希望从一个文件导出所有变量

firefox - 为多个 SDK 版本开发 Firefox 插件

javascript - 用大约 :config 覆盖 Firefox 不安全警告

javascript - 使用 cfx xpi 时 Firefox Add-on SDK 出现错误,而 cfx run 运行良好

javascript - loadContextGoodies 未定义