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

99封情书 提交于 2019-11-29 13:10:44

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.

Zsolt

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 );
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!