我对Javascript比较陌生,我正在处理一些小脚本来修改我经常使用的网页。我自动化的一个方面是在标签中打开某些链接,因此我不必手动执行此操作。
如果我将此行放入我的代码段并运行它,则没有任何反应:
window.open("http://www.google.com");
但是如果我在控制台中输入并点击返回,它会打开一个新的标签,其中的网址很好。所有这一切都发生在检查员身上。为什么它在一个地方工作而在另一个地方不工作?有解决方法吗?
答案 0 :(得分:1)
当Chrome检测到对window.open()
的呼叫不是来自用户手势时,它会将其作为弹出窗口阻止。
您可以通过显示在网址栏右边缘的小弹出模式手动覆盖它:
你提到的有趣的事情是:为什么它可以从控制台运行,但不是从代码片段?我问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)。但是,它可能会被浏览器作为弹出窗口阻止。