safari中的javascript window.open

safari中的javascript window.open,javascript,ipad,safari,Javascript,Ipad,Safari,我在safari(ipad和桌面版)中打开一个新窗口时遇到了一个问题,它围绕着弹出窗口拦截器。基本上,我发现如果单击事件没有调用window.open,safari将阻止弹出窗口 调用window.open的事件当前已从列表框中更改 在这种情况下,除了切换我们处理的事件之外,还有其他方法可以欺骗safari允许弹出窗口吗?(onchanged事件)我认为在mobile safari中,除了单击按钮之外,没有其他方法可以打开新窗口。请参阅类似的内容。我不确定它是否有效,但你可以看看 您可能还想查看

我在safari(ipad和桌面版)中打开一个新窗口时遇到了一个问题,它围绕着弹出窗口拦截器。基本上,我发现如果单击事件没有调用window.open,safari将阻止弹出窗口

调用window.open的事件当前已从列表框中更改


在这种情况下,除了切换我们处理的事件之外,还有其他方法可以欺骗safari允许弹出窗口吗?(onchanged事件)

我认为在mobile safari中,除了单击按钮之外,没有其他方法可以打开新窗口。请参阅类似的内容。我不确定它是否有效,但你可以看看

您可能还想查看在自己的页面中显示对话框的选项,可以使用jqueryui之类的工具


safari有一个弹出式拦截器消音器,当链接被阻止时不会显示

要检查弹出窗口阻止程序是否处于活动状态,请进入safari设置>安全>类似阻止弹出窗口的功能

为了简单地跨越它,因为我无法打开新窗口,所以我会显示一个警报,显示阻止的弹出窗口

在我的情况下,我使用选择输入打开外部链接:

HTML

PS:jquery触发器对我不起作用。

当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);
    }
((IOSDriver)driver.context(“本机应用程序”);
((IOSDriver)driver.findElement(By.id(“允许”))。单击();
试一试{
睡眠(5000);
}捕捉(中断异常e){
系统输出打印ln(e);
}

请记住

不幸的是,当您试图触发另一个元素“单击”事件时,safari也会将其作为弹出窗口进行阻止。获得弹出窗口的唯一方法是在控件上有一个用户生成的单击事件,如果您从Ipad上的下拉列表中选择一个项目,它被视为“单击”,但它不会触发单击事件,我对此很满意…:(是时候编写一些降级代码了!是的,基本上任何一款像样的浏览器都不允许window.open,除非执行可以追溯到用户启动的事件。在我看来,真正的问题似乎是内置的静默弹出阻止程序。遗憾的是,当用户生成触发异步操作的click…时,这甚至会中断。)(假设从IndexedDB中提取数据)…回调尝试打开窗口的位置:-(我最终采用了一种优雅的降级方法,允许用户仍然使用选择按钮选择他们想去的地方,然后使用一个按钮来实际执行导航…这样我就不会弹出任何突兀的消息。我最终在safari浏览器中显示一个弹出窗口,带有一个打开按钮,确保了window.Open co。)mmand是在用户启动的堆栈中执行的。
var open = window.open('http://google.com');
if (open == null || typeof(open)=='undefined')
    alert("Turn off your pop-up blocker!");
"safariAllowPopups": "true"
 ((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);
    }