为什么window.open()无法直接在<script>标记中工作?

时间:2018-08-30 23:01:20

标签: javascript browser

似乎javascript的function window.open()不能直接在脚本标记中工作,它必须在函数内部,并且必须调用该函数,为什么它和thanx?

示例:

  //不起作用
<脚本> var w = window.open(“ http://www.stackoverflow.com/”); //工作
<脚本> 函数n(){ var w = window.open(“ http://www.stackoverflow.com/”); }

4 个答案:

答案 0 :(得分:1)

window.open可以正常使用和无效。但是在没有实际用户操作的情况下调用它时会出现问题。浏览器的弹出窗口阻止程序将阻止您打开新窗口/标签。

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

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

您还可以通过在实际用户操作中将呼叫添加到window.open来使其正常工作,例如:

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

单击窗口后它将起作用。

答案 1 :(得分:0)

可能是因为DOM尚未准备好。试试:

Parameters

此外,这可能会被浏览器的弹出窗口阻止程序捕获。

答案 2 :(得分:0)

在此代码中,“ w”为null且没有打开任何窗口,因为您只能由于人为操作(例如单击按钮)才能打开新窗口。

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

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

答案 3 :(得分:0)

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

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

const button = document.getElementsByTagName('button')[0];

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

或在加载时自动触发功能:

window.onload = function() {
  window.open("https://www.stackoverflow.com/");
};

注意:由于安全策略的缘故,我的示例都不会在这里打开新窗口。
它们将在应用程序中运行。