window.open returns null and fails in inline script but works from console

前端 未结 2 1756
刺人心
刺人心 2020-12-07 00:23

I\'m using Smarty template system. One of its features is posibility to output script that generates debug information for every page. Here you can see an example of generat

相关标签:
2条回答
  • 2020-12-07 01:26

    It is blocked by the browser. window.open is only not being blocked, when it is invoked by user action, for example in a click event, emitted by a native browser event. Also javaScript emitted events are being blocked, just like delayed setTimeout callbacks.

    <a id="link" href="http://stackoverflow.com">StackOverflow</a>
    
    <script type="text/javascript">
    
    // Example (with jQuery for simplicity)
    
    $("a#link").click(function (e) {
      e.preventDefault();
    
      var url = this.href;
    
      // this will not be blocked
      var w0 = window.open(url);
      console.log("w0: " + !!w0); // w0: true
    
      window.setTimeout(function () {
        // this will be blocked
        var w1 = window.open(url);
        console.log("w1: " + !!w1); // w1: false
      }, 5000);
    });
    
    </script>
    

    Watch the Fiddle. I also tried it with the keypress event, but no luck.

    window.open returns a valid reference to the new (or an existing named) window, or null when it failed to create a new window.

    0 讨论(0)
  • 2020-12-07 01:26

    Try the next command after window.open with timeout, for example:

    var myWindow = window.open('foo','_blank','menubar=no, scrollbars=yes, top=10, width=800,height=600');
    
    setTimeout( myWindow.onload=function(){this.document.body.innerHTML+='bar';}, 2000 );
    
    0 讨论(0)
提交回复
热议问题