如何在JavaScript中模拟target =“_ blank”

时间:2009-10-15 17:51:06

标签: javascript

当用户点击链接时,我需要更新数据库中的字段,然后在新窗口中打开请求的链接。更新没问题,但我不知道如何打开新窗口而不要求他们点击另一个超链接。

<body onLoad="document.getElementById('redirect').click">
<a href="http://www.mydomain.com?ReportID=1" id="redirect" target="_blank">Report</a>
</body>

7 个答案:

答案 0 :(得分:260)

<script>
    window.open('http://www.example.com?ReportID=1', '_blank');
</script>

第二个参数是可选的,是目标窗口的名称。

答案 1 :(得分:16)

这可能会有所帮助

var link = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
    link.href = 'http://www.google.com';
    link.target = '_blank';
    var event = new MouseEvent('click', {
        'view': window,
        'bubbles': false,
        'cancelable': true
    });
    link.dispatchEvent(event);

答案 2 :(得分:11)

我知道这是一个完成并整理出来的交易,但这就是我用来解决我的应用中的问题。

if (!e.target.hasAttribute("target")) {
    e.preventDefault();     
    e.target.setAttribute("target", "_blank");
    e.target.click();
    return;
}

基本上这里发生的是我检查链接是否具有target=_blank属性。如果没有,它会阻止链接触发,将其设置为在新窗口中打开,然后以编程方式单击它。

你可以更进一步,跳过停止原始点击(并使你的代码更加紧凑)尝试这个:

if (!e.target.hasAttribute("target")) {
    e.target.setAttribute("target", "_blank");
}

如果您使用jQuery抽象出添加跨浏览器属性的实现,则应使用此代替e.target.setAttribute("target", "_blank")

    jQuery(event.target).attr("target", "_blank")

您可能需要对其进行修改以适合您的确切用例,但这就是我如何抓住自己的痒。

这里有一个demo,它可以让你搞砸。

(jsfiddle中的链接回到了这个讨论..不需要新的标签:))

答案 3 :(得分:7)

如果是单个链接,我个人更喜欢使用以下代码。否则,最好是使用类似的代码创建一个函数。

onclick="this.target='_blank';"

我开始使用它来绕过W3C的XHTML严格测试。

答案 4 :(得分:5)

这是我用jQuery做的。我有一个类,我希望在新窗口中打开每个链接。

$(function(){

    $(".external").click(function(e) {
        e.preventDefault();
        window.open(this.href);
    });
});

答案 5 :(得分:2)

您可以从a标签中提取href:

window.open(document.getElementById('redirect').href);

答案 6 :(得分:1)

这可以帮助您打开所有页面链接

$(".myClass").each(
     function(i,e){
        window.open(e, '_blank');
     }
);

它会将每个<a href="" class="myClass"></a>个链接项打开到另一个标签页,就像您点击每个标签一样。

您只需将其粘贴到浏览器控制台。需要jQuery框架