javascript – Firefox onLocationChange并不总是被调用

前端之家收集整理的这篇文章主要介绍了javascript – Firefox onLocationChange并不总是被调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个可以创建几个隐藏的浏览器元素的Firefox扩展.

我想addProgressListener()来处理我加载的页面的onLocationChange.但是,我的处理程序并不总是被调用.

更具体地说,这是我在做什么:

>创建浏览器元素,而不设置其src属性
>将其附加到另一个元素
>添加一个进度监听器,监听onLocationChange到浏览器元素
>使用所需的URL和post数据调用loadURIWithFlags()

我期望在4之后每次调用处理程序,但有时它不会(似乎被困在同一页面上).

有趣的是,如果我将3和4包在一个setTimeout(…,5000)中;它每次都工作.

我也尝试洗牌一些步骤,但没有任何影响.

更大的图景:当浏览器的contentDocument是新加载的页面(重定向后)时,我想被可靠地通知.有没有更好的方法来做到这一点?

更新:我已经开发了一个bug的mozilla的bug跟踪器与一个最小的xulrunner应用程序显示这种行为,以防任何人想要仔细观察:https://bugzilla.mozilla.org/show_bug.cgi?id=941414

解决方法

在我使用Firefox开发的经验中,我发现在某些情况下,各种元素的初始化代码就像异步一样.换句话说,当你完成执行
var newBrowser = window.document.createElement('browser');
newBrowser.setAttribute('flex','1');
newBrowser.setAttribute('type','content');
cacheFrame.insertBefore(newBrowser,null);

,您的浏览器可能还没有准备好.当你添加延迟时,事情有时间初始化,所以他们工作正常.此外,当您做动态创建浏览器元素时,您可能会做的事情很少有人尝试过.换句话说,这听起来像是Firefox中的一个bug,也可能是一个不太受关注的bug.

您说您正在使用onLocationChange,以便您可以知道何时添加负载侦听器.自从你提到之后,我会猜测你正在将内容加载器添加到contentDocument中.您可以做的是将负载侦听器添加到浏览器本身,就像使用iframe一样.如果我更换

newBrowser.addProgressListener(listener);

newBrowser.addEventListener("load",function(e) {
  console.log('got here! ' + e.target.contentDocument.location.href);
},false);

然后我收到每个浏览器的通知.

原文链接:https://www.f2er.com/js/153045.html

猜你在找的JavaScript相关文章