【发布时间】:2013-11-20 21:37:10
【问题描述】:
我正在构建一个创建多个隐藏浏览器元素的 Firefox 扩展。
我想addProgressListener() 为我加载的页面处理 onLocationChange。但是,我的处理程序并不总是被调用。
更具体地说,这就是我正在做的事情:
- 创建浏览器元素,但不设置其
src属性 - 将其附加到另一个元素
- 将监听
onLocationChange的进度监听器添加到浏览器元素 - 使用所需网址致电
loadURIWithFlags()并发布数据
我希望处理程序在 4 之后每次都被调用,但有时它不会(但它似乎卡在相同的页面上)。
有趣的是,如果我将 3 和 4 包装在 setTimeout(..., 5000); 中,它每次都有效。
我也尝试过改组一些步骤,但没有任何效果。
更大的图景:当浏览器的contentDocument 是新加载页面的contentDocument 时(重定向后),我希望得到可靠的通知。有没有更好的方法来做到这一点?
更新:我已经在 mozilla 的错误跟踪器上打开了一个错误,其中包含显示此行为的最小 xulrunner 应用程序,以防有人想仔细查看:https://bugzilla.mozilla.org/show_bug.cgi?id=941414
【问题讨论】:
-
我们能得到一些代码/小提琴吗?你如何设置你的听众?
-
@Cracker0dks 有一个最小的 xulrunner 应用程序附加到该错误:bugzilla.mozilla.org/show_bug.cgi?id=941414
-
我意识到这是一个简化的测试用例,但你想完成什么?为什么使用 onLocationChange 而不是简单的负载监听器?为什么使用
而不是 -
我实际上这样做是为了可以收听
load事件。当第一次创建浏览器元素时,它的contentDocument没有指向正确的页面(它指向about:blank)。只有在onLocationChange被触发后,contentDocument才会更新为指向新页面(或者至少这是我能找到的最早的页面)。 -
抱歉,忘记回复您声明的第二部分。我需要它是一个浏览器元素,因为我需要它的行为就像用户正在访问该站点一样,包括执行 javascript。一些网站通过阻止 iframe 来防御点击劫持,并且 XmlHttpRequest 不会“执行”页面。我需要它来可靠地为所有站点工作。
标签: javascript firefox firefox-addon settimeout xul