Javascript window.open可在Chrome控制台中运行,但不能作为代码段使用

时间:2017-07-26 15:15:36

标签: javascript google-chrome-devtools

我对Javascript比较陌生,我正在处理一些小脚本来修改我经常使用的网页。我自动化的一个方面是在标签中打开某些链接,因此我不必手动执行此操作。

如果我将此行放入我的代码段并运行它,则没有任何反应:

window.open("http://www.google.com");

但是如果我在控制台中输入并点击返回,它会打开一个新的标签,其中的网址很好。所有这一切都发生在检查员身上。为什么它在一个地方工作而在另一个地方不工作?有解决方法吗?

2 个答案:

答案 0 :(得分:1)

当Chrome检测到对window.open()的呼叫不是来自用户手势时,它会将其作为弹出窗口阻止。

您可以通过显示在网址栏右边缘的小弹出模式手动覆盖它:

pop-up modal

你提到的有趣的事情是:为什么它可以从控制台运行,但不是从代码片段?我问DevTools团队,其中一人非正式地认为DevTools将Console执行视为用户手势,以避免像这样的安全检查。

对您而言,一个可能足够好的解决方法是从新的Chrome标签(chrome://newtab)运行您的代码段。当我从该页面运行Snippet时,我可以打开新窗口而不会触发“弹出窗口阻止”模式。

感谢您在Console和Snippets之间进行实验。结果证明非常有趣。

答案 1 :(得分:0)

确实,window.open有点误导。这是因为window是JavaScript中的全局上下文,open是该对象中的方法。你不应该把它读成“打开一个窗口”。 实际上,它

  

将资源加载到新的浏览环境中(,例如一个窗口)

MDN

大多数现代浏览器都是标签式的,因此浏览contxt 是一个标签,然后,它们(大多数情况下,但并不总是)会打开一个新标签而不是一个窗口。你能做什么?例如,像

这样的代码
window.open('http://google.de', 'google', 'width=500,height=500')

实际上为我打开了一个窗口(Chrome 59)。但是,它可能会被浏览器作为弹出窗口阻止。