Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么window.open()不能直接在a中工作<;脚本>;标签?_Javascript_Browser - Fatal编程技术网

Javascript 为什么window.open()不能直接在a中工作<;脚本>;标签?

Javascript 为什么window.open()不能直接在a中工作<;脚本>;标签?,javascript,browser,Javascript,Browser,javascript的函数window.open()似乎不能直接在脚本标记中工作,它必须在函数中,并且必须调用该函数。为什么会这样 例如: //Not working <div> <button> Click here </button> </div> <script> var w = window.open("http://www.stackoverflow.com/"); </script> //Working <

javascript的函数window.open()似乎不能直接在脚本标记中工作,它必须在函数中,并且必须调用该函数。为什么会这样

例如:

//Not working
<div>
<button> Click here </button>
</div>
<script>
var w = window.open("http://www.stackoverflow.com/");
</script>

//Working
<div>
<button onclick=n()> Click here </button>
</div>
<script>
function n(){
var w = window.open("http://www.stackoverflow.com/");
}
</script>
//不工作
点击这里
var w=窗口打开(“http://www.stackoverflow.com/");
//工作
点击这里
函数n(){
var w=窗口打开(“http://www.stackoverflow.com/");
}

可能是因为DOM还没有准备好。尝试:

document.addEventListener("DOMContentLoaded", function() { 
    window.open("https://www.stackoverflow.com/");
});
此外,这可能会被浏览器的弹出窗口阻止程序捕获。

在此代码中,“w”为空,并且没有打开任何窗口,因为您只能通过人工操作(如单击按钮)打开新窗口


点击这里
var w=窗口打开(“http://www.stackoverflow.com/");

这样做是为了避免站点在未经用户同意的情况下随机打开新窗口。

在第一个示例中,您刚刚将open()函数分配给了一个变量;您实际上没有以任何方式调用(触发)该函数

您可以通过将事件侦听器附加到按钮来执行此操作,以便在单击时触发该函数:

const button=document.getElementsByTagName('button')[0];
addEventListener(“单击”,函数(){
窗口打开(“https://www.stackoverflow.com/");
});

点击这里

窗口。打开
将在功能内和功能外工作。但是,如果在没有实际用户操作的情况下调用它,则会出现问题。浏览器的弹出窗口拦截器将阻止它打开新窗口/选项卡

您将在浏览器中看到此警告

您可以通过禁用弹出窗口阻止程序使其工作

您还可以通过添加对
窗口的调用使其工作。在实际用户操作中打开
,例如:

<script>
window.addEventListener("click", function() {
  window.open("https://www.stackoverflow.com/");
});
</script>

addEventListener(“单击”,函数(){
窗口打开(“https://www.stackoverflow.com/");
});

当您单击窗口时,它将工作

因为很多人滥用它来播放无关的广告。。。充其量。你在使用Chrome吗?你有你的弹出窗口拦截器吗?如果您关闭弹出窗口拦截器,它将按预期工作()。参考:window.open(…)
没有调用任何东西吗?半正确。代码仍然是错误的,因为您需要通过用户手势的事件进行调用。在按钮被画出来之前,你现在就这样做了。但是不管函数有没有,代码都是一样的,所以在函数内部执行和直接执行有什么区别吗?@kaido这就是我要说的!我同意你的看法!没有手势就无法打开新窗口。这就是为什么使用onclick的第二个代码可以工作的原因!是的,但是您的代码没有显示它。您需要从click事件处理程序调用它。这里你是putside,什么都没听。是的,我想我现在明白了,所以编译器忽略了它,因为它不是由事件触发的,是吗?@pinturic他右边的兄弟,它在工作,只是弹出阻止程序
<script>
window.addEventListener("click", function() {
  window.open("https://www.stackoverflow.com/");
});
</script>