Safari 阻止弹窗提示

6

我有一个Twitter登录,众所周知谷歌和Facebook有自己的打开登录弹出窗口的脚本,它在Safari上也可以正常工作,但是Twitter不行。因此我们实现了自己的脚本,但我们面临的问题是IOS设备正在阻止使用以下方式打开的弹出窗口:

 window.open(url, '_blank', 'height=400,width=800,left=250,top=100,resizable=yes', true);

我在阅读 (如何在Safari中绕过弹出窗口拦截器) 后也尝试创建锚点:

 <a id="js__twitter__popup-link" target="_blank" style="visibility: hidden;"></a>

然后我们将url添加到href中this.twitterPopupLink.setAttribute('href', url),然后document.querySelector("#js__twitter__popup-link").click(),但在IOS上,即使这样也不会打开新页面。

测试人员说,在iPad上弹出窗口已经打开,但是使用IOS模拟器时,它在iPad上没有打开。毫无疑问,它也无法在iPhone上打开弹出窗口。

1个回答

7

即使这样,在iOS上也不会打开新页面

正确。弹出窗口拦截器的作用是防止弹出窗口。任何您可以想象到的解决方法,他们可能已经想到并进行了防范。

一般来说,只有在用户发起的点击之后立即才能打开一个弹出窗口。通过JavaScript触发点击无法绕过此限制。


谢谢你的回答!我明白了,但是不知何故Facebook和Google在不需要用户进行额外点击的情况下解决了这个问题。 - Daniel
我们还实现了Facebook和Google登录,增加了两个额外的按钮,但是一旦你点击按钮,弹出窗口就会打开,现在似乎对于Twitter,我需要让用户点击两次(至少在IOS上)。 - Daniel
1
不,你不需要两次点击。只需停止尝试模拟点击。创建一个按钮,它具有调用您的window.open代码的onclick。它只需要是同步和用户启动的。 - ceejayoz
Twitter按钮是一个Web组件,该组件监听点击事件,当被点击时会调用后端API获取Twitter令牌,使用消费者API密钥(存储在配置文件中)。在接收到响应后,客户端尝试使用带有参数的Twitter URL打开Twitter弹出窗口。 - Daniel
你打开一个弹出窗口到你的服务器上的一个页面。在那个页面上,你发起了一个AJAX调用,然后在它完成后进行重定向。 - ceejayoz
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接