【问题标题】:To open different links using window.open()使用 window.open() 打开不同的链接
【发布时间】:2010-02-01 23:39:51
【问题描述】:

我有一个数据表,其中一列包含 URL。单击这些链接时,我必须在新页面中打开相应的链接。我正在使用window.open() 打开这些链接。 它正在打开一个新窗口但不显示页面。我使用的javascript代码是:

function openDisclaimer(objectId)
{
var disclaimerID = objectId.id;
var url = document.getElementById(objectId).value;
window.open(url);
}

<h:commandLink id="dsclaimLink" value="#{managePersonalization.disclaimerURL}" onclick="openDisclaimer(this);" >

【问题讨论】:

  • 你有 JSF,它生成 JavaScript+HTML,它产生一个输出。你只是向我们展示了两端。问题出在哪里?生成的 HTML+JavaScript 是否与您期望的不一样,或者您从生成的 HTML+JavaScript 得到的结果与您期望的不一样?

标签: javascript jsf hyperlink


【解决方案1】:

首先,在古老的 JSF 版本中,有一个错误导致命令链接无法以这种方式工作。确保您使用的是最新版本/构建。 Mojarra 可用here,MyFaces 可用here

至于您的实际问题,commandlink 基本上会生成一个提交父表单的链接。它应该放在h:form 中,但在这里你只需要一个plain vanilla 链接。在这种情况下,请将其替换为 h:outputLink。不要忘记在点击事件结束时添加return false; 以阻止链接的默认操作。

<h:outputLink 
    value="#{managePersonalization.disclaimerURL}" 
    onclick="openDisclaimer(this); return false;">
    <h:outputText value="Disclaimer" />
</h:outputLink>

此外,value 属性实际上以生成的&lt;a&gt; 元素的href 属性结束,因此您的JavaScript 需要修复它从href 属性而不是value 属性获取URL (JavaScript 看不到 JSF 源代码,只能看到其生成的 HTML 输出!):

function openDisclaimer(link) {
    window.open(link.href);
}

您还看到 document.getElementById 已被删除,因为它没有任何意义,因为您已经将唯一的元素作为函数参数! ;)

你甚至可以去掉整个函数:

<h:outputLink 
    value="#{managePersonalization.disclaimerURL}" 
    onclick="window.open(this.href); return false;">
    <h:outputText value="Disclaimer" />
</h:outputLink>

或者,如果您真的想要一个有价值的选项卡/窗口而不是 popup 窗口,那么您也可以使用您设置的 target 属性给_blank

<h:outputLink 
    value="#{managePersonalization.disclaimerURL}" 
    target="_blank">
    <h:outputText value="Disclaimer" />
</h:outputLink>

【讨论】:

  • 感谢您的回复。我尝试了上面的代码 sn-p。在 Mozilla 中,它给出错误“c 未注册协议”,在 IE 中给出“拒绝访问”
  • 我也用 h:commandLink 试过了。尽管有链接,但它正在打开同一页面。
  • 这是h:outputLink输出链接。你加return false;了吗?您是否指定了正确 URL?你有最新的 JSF 版本吗? onclick 属性是否在 HTML 输出中生成?您是否尝试过target 属性?由window.open 触发的弹出窗口通常在现代浏览器中被阻止。如果您需要更好的帮助,请使用生成的 HTML 输出更新您的问题。
  • 我添加了 return false;网址是正确的。目标属性已尝试。
  • 1) 升级到 1.1_02 javaserverfaces.dev.java.net/files/documents/1866/33714/… 2) 如果您需要更好的帮助,请使用生成的 HTML 输出更新问题(在升级到 1.1_02 并进行测试之后!)。
【解决方案2】:

你为什么不这样做:

<h:commandLink id="dsclaimLink" value="#{managePersonalization.disclaimerURL}" 
    onclick="window.open('#{managePersonalization.disclaimerURL}');" />

【讨论】:

  • 感谢您的回复。它给出了javascript错误“)预期”
  • 好吧,只需添加单引号。我忘记了。
  • 生成的javascript是什么样子的?
  • 那么你的网址是错误的。这就是为什么我和 BalusC 想要生成的 javascript。去查看源代码看看。
【解决方案3】:

只需检查 objectID 返回什么

【讨论】:

猜你喜欢
  • 2021-08-13
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 2022-01-27
相关资源
最近更新 更多