繁体   English   中英

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

[英]'window.open' blocked by Chrome with change event

我试图在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">

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

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

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

这是设计,浏览器唯一没有阻止window.open是你处理click事件。

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

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

您应该可以通过点击接线来解决此问题,并简单地确定新选择的项目是否与之前选择的项目匹配。

我编辑了以前的JSFiddle以使其工作。

dropdown.addEventListener('click', Foo);    
function Foo(e)
{
    var selectedIndex = dropdown.selectedIndex;
    if(selectedIndex !== oldSelectedIndex)
    {
        var val = dropdown.options[selectedIndex].value;
        var opened = window.open(val);
        oldSelectedIndex = selectedIndex;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM