自版本18以来的Firefox Bug

时间:2013-03-12 16:44:24

标签: javascript jquery jsf firefox richfaces

我正在使用Java Server Faces,JQuery和JavaScript。我想我在Firefox中发现了一个错误。 此JavaScript代码被触发:

var list = jQuery('input.myclass');
var item = list.eq(0);
item.click();
top.location.reload(true);

点击将点击a4j:commandButton,它与我的动作方法'mybean.myaction()'相关。如果我使用的是Firefox 19或Firefox 18,可能会点击该按钮。无论如何,页面的重新加载发生得太快了。我可以通过在mybean.myaction()中设置Eclipse断点来看到这一点 - 断点永远不会到达。

如果我使用的是Firefox 17,InternetExplorer的所有作品像预期的那样,得到的Javascript触发,点击情况,豆方法调整Bean的状态和页面重新加载得到。

提前感谢您提供了一些如何澄清此行为原因的想法。如果合适,我将在Firefox bugzilla中提交一个错误。

更新:这是a4j:commandButton,被JQuery点击;

<a4j:commandButton action="#{mybean.myaction}" value="setMyVal" styleClass="hidden myclass">
    <a4j:actionparam name="myparamname" value="MY_VAL" assignTo="#{mybean.myattr}" /></a4j:commandButton>

UPDATE-2:我玩了解决问题。我在块周围放置了一个try-catch-statement,而且我替换了reload(),我将能够遵循javascript执行。现在,我可以看到,如果我输入top.location.host,我将跳转到catch块,但我的errorText是'undefinded'。怎么会发生这种情况?我该怎么做才能找到更多这个例外?

try{ ...
    item.click();
    // Firefox-Bug in Version ab 18.0.1
    var res = top.location.host; //top.location.reload(true);
} catch (e) {
    var errorText = e.message; // errorText is undefined! 
    alert("Exception: " + errorText);
}

UPDATE-3:它得到陌生人和陌生人...如果余设置萤火虫-断点item.click()和top.location.reload(真)之间;一切都很好!因此,问题可能是a4j。也许今天退出是明智的。感谢您迄今为止的所有帮助!

1 个答案:

答案 0 :(得分:2)

这不是问题的答案,而是关于如何解决问题的建议。因此,您可以使用commandButton的oncomplete属性在操作完成后重新加载页面:

<a4j:commandButton action="#{mybean.myaction}" value="setMyVal" styleClass="hidden myclass" oncomplete="top.location.reload(true);">
    <a4j:actionparam name="myparamname" value="MY_VAL" assignTo="#{mybean.myattr}" />   
</a4j:commandButton>

这样就可以序列化事件:首先调用操作,并且只在重新加载页面之后。当然,您需要从JavaScript代码中删除top.location.reload(true);

编辑:更多地思考这个问题...而且我认为这不是一个错误。在任何地方都不需要Firefox等到服务器上处理您的点击事件(Richfaces的复杂操作)。它将click事件发送到Richfaces javascript并转到下一个语句:top.location.reload(true);。你需要防止这个问题。