我在Safari浏览器(包括iPad和桌面版)中打开新窗口时遇到了问题,与弹出窗口拦截器有关。基本上,我发现如果window.open不是从单击事件调用的,Safari将阻止弹出窗口。
当前调用window.open的事件是从列表框onchanged事件中更改的。
除了切换我们处理的事件以欺骗Safari允许此情况下的弹出窗口(onchanged事件),还有其他方法吗?
我在Safari浏览器(包括iPad和桌面版)中打开新窗口时遇到了问题,与弹出窗口拦截器有关。基本上,我发现如果window.open不是从单击事件调用的,Safari将阻止弹出窗口。
当前调用window.open的事件是从列表框onchanged事件中更改的。
除了切换我们处理的事件以欺骗Safari允许此情况下的弹出窗口(onchanged事件),还有其他方法吗?
safari浏览器有一个可以静音弹出窗口拦截器的功能,但没有显示被阻止的链接。
要检查弹出窗口拦截器是否激活,请进入safari设置 > 安全性 > 类似于“阻止弹出式窗口”的选项。
为了简单地解决这个问题,因为我无法打开一个新窗口,我会显示一个警报,显示弹出窗口被阻止。
在我的情况下,我使用选择输入来打开外部链接:
<select id="retailer" class="windowOpen retailer-submenu">
<option value="null">Select one</option>
<option value="http://amazon.com">Amazon</option>
<option value="http://ebay.com">eBay</option>
</select>
<script type='text/javascript'>
$('select.windowOpen').change(function(){
var url = $(this).val();
var open = window.open(url);
if (open == null || typeof(open)=='undefined')
alert("Turn off your pop-up blocker!\n\nWe try to open the following url:\n"+url);
});
</script>
var open = window.open('http://google.com');
if (open == null || typeof(open)=='undefined')
alert("Turn off your pop-up blocker!");
PS:在我的情况下,jQuery触发器没有起作用。
我认为在移动Safari中除了通过按钮单击之外没有其他方法打开新窗口。请参考类似的 StackOverflow问题。我不确定它是否有效,但你可以查看使用jQuery的trigger()函数以编程方式触发按钮单击事件。
你可能还想查看在自己的页面内显示对话框的选项,也许使用像jQuery UI这样的工具。
希望有所帮助!
当Safari阻止弹出窗口时,即使您单击链接,它也似乎没有被点击。您可以在您的能力中使用以下内容来启用Safari弹出窗口。
"safariAllowPopups": "true"
要在Safari弹出窗口中点击允许按钮,请使用以下代码:
((IOSDriver<IOSElement>) driver).context("NATIVE_APP");
((IOSDriver<IOSElement>) driver).findElement(By.id("Allow")).click();
try{
Thread.sleep(5000);
}catch (InterruptedException e){
System.out.println(e);
}