Javascript window.open在Chrome控制台中工作,但不是作为代码片段
我对Javascript比较陌生,我正在编写一些小脚本来修改我经常使用的网页。我正在自动化的一件事是在选项卡中打开某些链接,因此我不必手动这样做 如果我将这一行放入代码段并运行它,则不会发生任何事情:Javascript window.open在Chrome控制台中工作,但不是作为代码片段,javascript,google-chrome-devtools,Javascript,Google Chrome Devtools,我对Javascript比较陌生,我正在编写一些小脚本来修改我经常使用的网页。我正在自动化的一件事是在选项卡中打开某些链接,因此我不必手动这样做 如果我将这一行放入代码段并运行它,则不会发生任何事情: window.open("http://www.google.com"); 但是,如果我在控制台中键入它并点击return,它会打开一个带有url的新选项卡。所有这些都发生在检查员身上。为什么它在一个地方工作而在另一个地方不工作?有解决办法吗?的确,窗口。打开有点误导。这是因为window是Ja
window.open("http://www.google.com");
但是,如果我在控制台中键入它并点击return,它会打开一个带有url的新选项卡。所有这些都发生在检查员身上。为什么它在一个地方工作而在另一个地方不工作?有解决办法吗?的确,
窗口。打开有点误导。这是因为window
是JavaScript中的全局上下文,open
是该对象中的一个方法。你不应该把它理解为“打开一扇窗”。
事实上,它
将资源加载到[…]新的浏览上下文(如窗口)
()
大多数现代浏览器都是选项卡式的,因此浏览上下文是一个选项卡,然后,它们(大多数,但不总是)会打开一个新的选项卡而不是一个窗口。你能做什么?例如,类似于
window.open('http://google.de', 'google', 'width=500,height=500')
实际上为我打开了一个窗口(Chrome59)。但是,它可能会被浏览器阻止为弹出窗口。当Chrome检测到对window.open()
的调用时,它会将其阻止为弹出窗口
您可以通过URL栏右边缘显示的小弹出模式手动覆盖此选项:
您提到的有趣的事情是:为什么它是从控制台工作的,而不是从片段工作的?我问过DevTools团队,其中一个非正式地认为DevTools将控制台执行视为用户手势,以避免此类安全检查
一个对您来说足够好的解决方法是从新的Chrome选项卡(chrome://newtab
)。当我从该页面运行代码段时,我可以打开新窗口,而不会触发“弹出阻止”模式
感谢您在控制台和代码片段之间进行试验。这很有趣。我在地址栏中看到一个关于被阻止的弹出窗口的通知。A好的,这是默认行为,但是你可以在浏览器选项中更改它。你可以参考这篇文章的解释。谢谢你帮我调查这件事。事实证明,正如您和wOxxOm所建议的,“允许”相关站点的弹出窗口可以解决问题。一旦弹出窗口被解锁,代码片段就可以像我需要的那样打开一个选项卡。