如何在JavaScript中模拟target ="_ blank"

Phi*_*enn 148 javascript

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

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

Chr*_*heD 280

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

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

  • 有没有像Firefox那样的弹出窗口阻止程序阻止的JavaScript解决方案? (7认同)
  • @MattDiPasquale阻止window.open有点像弹出窗口拦截器!如果您响应点击操作拨打电话,则更有可能不被阻止. (4认同)
  • 是.window.open()的第二个参数是您想要给窗口的"名称",类似于在链接上设置目标.https://developer.mozilla.org/En/DOM:window.open (3认同)
  • `window.open`做什么`target ="_ blank"`做 - 它在新窗口中打开URL. (2认同)
  • 原来如此.window.open被Firefox弹出窗口阻止程序阻止,但是target ="_ blank"不是.我应该要求客户从他们自己的网站启用弹出窗口吗? (2认同)

Jai*_*ina 17

这可能有所帮助

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);
Run Code Online (Sandbox Code Playgroud)

  • 可以通过添加对正在发生的事情的一些描述来改进这个答案 (8认同)

aka*_*ozu 12

我知道这是一个完成和整理的交易,但这是我用来解决我的应用程序中的问题.

if (!e.target.hasAttribute("target")) {
    e.preventDefault();     
    e.target.setAttribute("target", "_blank");
    e.target.click();
    return;
}
Run Code Online (Sandbox Code Playgroud)

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

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

if (!e.target.hasAttribute("target")) {
    e.target.setAttribute("target", "_blank");
}
Run Code Online (Sandbox Code Playgroud)

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

    jQuery(event.target).attr("target", "_blank")
Run Code Online (Sandbox Code Playgroud)

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

这是一个实际的演示,让你搞砸.

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


小智 7

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

onclick="this.target='_blank';"
Run Code Online (Sandbox Code Playgroud)

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


Jin*_*lcl 5

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

$(function(){

    $(".external").click(function(e) {
        e.preventDefault();
        window.open(this.href);
    });
});
Run Code Online (Sandbox Code Playgroud)