'window.open'已被Chrome更改事件阻止

Ada*_*ock 3 html javascript google-chrome onchange

我试图在select元素上打开一个基于onChange事件的窗口,而不会被Chrome的弹出窗口阻止程序阻止.

这里证明了这个问题.

https://jsfiddle.net/yyfe0824/1/

<select class="dropdown-select" onChange="window.open('https://www.google.com');">
    <option value="uno">Uno</option>
    <option value="dos">Dos</option>
    <option value="tres">Tres</option>
</select>

<input type="button" onClick="window.open('https://www.google.com');" value="click me">
Run Code Online (Sandbox Code Playgroud)

window.open调用"单击我"按钮没有问题,但如果您尝试更改选择下拉列表,则chrome将阻止弹出窗口.

到目前为止,这个问题的答案已经特定于onClick事件.进行研究表明,如果Chrome检测到它不是通过某种处理程序触发的用户,Chrome会阻止弹出窗口,因此我特意尝试内联调用该函数,而不是使用其他命名函数.

这是window.open的预期行为,特别是onChange,如果有的话,是否有任何特定的解决方法?(除了首先将结构更改为点击事件.)

Jua*_*des 5

这是设计,浏览器不阻止的唯一时间window.open是您处理click事件.

我的建议是提供一个链接,当用户从下拉列表中选择时,该链接会发生变化.

我建议不要打开弹出窗口,因为当你从下拉列表中选择时,用户不希望弹出窗口,这就是弹出窗口阻止程序通常不允许这样做的原因.即使您在浏览器中找到可以使用的内容(在Firefox 中为https://jsfiddle.net/yyfe0824/5/),它也可能在将来中断.