【问题标题】:Page becomes 'frozen' in Chrome after commandLink with target="_blank" is pressed按下带有 target="_blank" 的 commandLink 后,Chrome 中的页面会“冻结”
【发布时间】:2011-01-07 20:39:02
【问题描述】:

这里是jsf代码:

<h:commandLink id="previewlink" value="#{msg['report.preview']}" target="_blanc">
    <f:param name="printpreview" value="#{previewTitle}"/>
</h:commandLink>

当我按下链接时,新页面会在新选项卡中打开并且工作正常,但父页面会被阻止(即它的命令链接都不起作用)。在 Firefox 中,两个页面都可以正常工作。

有什么建议吗?

UPD:img 中的来源(在 chrome 中找不到文本版本)

alt text http://img402.imageshack.us/img402/2127/source.png

【问题讨论】:

  • 你能显示实际的 HTML 结果吗? target='blanc` 中的错字是否只在 SO 上?可能是链接实际上正在触发,但在您屏幕上其他地方已有的新文档中?
  • @Thorbjørn Ravn Andersen:我真的希望你指出真正的问题,但不幸的是 _blank 没有帮助

标签: java jsf google-chrome


【解决方案1】:

查看生成的 JavaScript 函数,您正在使用 Sun Mojarra 作为 JSF 实现(请提及,将来会提供更多详细信息,例如,您还可以使用 Apache MyFaces)。

我刚刚在 Tomcat 6.0.20 上使用 Mojarra 1.2_14 尝试了以下 SSCCE

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<f:view>
    <html>
        <head>
            <title>SO question 2111438</title>
        </head>
        <body>
            <h:form id="form">
                <h:commandLink id="link" value="link" action="#{bean.action}" target="_blank">
                    <f:param name="paramname" value="paramvalue" />
                </h:commandLink>
            </h:form>
        </body>
    </html>
</f:view>

...在请求范围的 bean 上使用虚拟操作方法,它在 Chrome 3.0.195.38 上完美运行。

不过,我记得在 Mojarra 1.2_08 前后已经修复了 Safari 的类似 JavaScript 问题。确保您使用的是最新的 Mojarra 版本。您可以通过他们的main dev site 获得它。希望这会有所帮助。

顺便说一句,生成的完整 HTML 源代码(稍微重新格式化):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html> 
    <head> 
        <title>SO question 2111438</title> 
    </head> 
    <body> 
        <form id="form" name="form" method="post" action="/playground/test.jsf" enctype="application/x-www-form-urlencoded"> 
            <input type="hidden" name="form" value="form" /> 
            <script type="text/javascript" language="Javascript">function dpf(f) {var adp = f.adp;if (adp != null) {for (var i = 0;i < adp.length;i++) {f.removeChild(adp[i]);}}};function apf(f, pvp) {var adp = new Array();f.adp = adp;var i = 0;for (k in pvp) {var p = document.createElement("input");p.type = "hidden";p.name = k;p.value = pvp[k];f.appendChild(p);adp[i++] = p;}};function jsfcljs(f, pvp, t) {apf(f, pvp);var ft = f.target;if (t) {f.target = t;}f.submit();f.target = ft;dpf(f);};</script> 
            <a id="form:link" href="#" onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('form'),{'form:link':'form:link','paramname':'paramvalue'},'_blank');}return false">link</a><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id8:j_id9" /> 
        </form>
    </body> 
</html>

【讨论】:

  • 非常感谢您的关注。过几天我也会尝试探索这个问题,并写下结果。
【解决方案2】:

target="" 属性仅用于框架或用于 HTML 4.01

谷歌浏览器在这方面有一个著名的问题。

请尝试使用 javascript - jQuery 以获得更好的跨浏览器兼容性。

【讨论】:

    猜你喜欢
    • 2012-08-18
    • 2013-04-27
    • 2019-08-03
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 2015-06-09
    相关资源
    最近更新 更多