How to simulate target=“_blank” in JavaScript

前端 未结 7 1680
旧巷少年郎
旧巷少年郎 2020-12-02 08:05

When a user clicks on a link, I need to update a field in a database and then open the requested link in a new window. The update is no problem, but I don\'t know how to op

相关标签:
7条回答
  • 2020-12-02 08:14

    This might help

    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);
    
    0 讨论(0)
  • 2020-12-02 08:18

    I personally prefer using the following code if it is for a single link. Otherwise it's probably best if you create a function with similar code.

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

    I started using that to bypass the W3C's XHTML strict test.

    0 讨论(0)
  • 2020-12-02 08:19

    I know this is a done and sorted out deal, but here's what I'm using to solve the problem in my app.

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

    Basically what is going on here is I run a check for if the link has target=_blank attribute. If it doesn't, it stops the link from triggering, sets it up to open in a new window then programmatically clicks on it.

    You can go one step further and skip the stopping of the original click (and make your code a whole lot more compact) by trying this:

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

    If you were using jQuery to abstract away the implementation of adding an attribute cross-browser, you should use this instead of e.target.setAttribute("target", "_blank"):

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

    You may need to rework it to fit your exact use-case, but here's how I scratched my own itch.

    Here's a demo of it in action for you to mess with.

    (The link in jsfiddle comes back to this discussion .. no need a new tab :))

    0 讨论(0)
  • 2020-12-02 08:20

    This might help you to open all page links:

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

    It will open every <a href="" class="myClass"></a> link items to another tab like you would had clicked each one.

    You only need to paste it to browser console. jQuery framework required

    0 讨论(0)
  • 2020-12-02 08:30
    <script>
        window.open('http://www.example.com?ReportID=1', '_blank');
    </script>
    

    The second parameter is optional and is the name of the target window.

    0 讨论(0)
  • 2020-12-02 08:32

    You can extract the href from the a tag:

    window.open(document.getElementById('redirect').href);
    
    0 讨论(0)
提交回复
热议问题