Captive Wifi Popup:点击一个链接打开Safari

我们在iOS设备(ipad,iphones等)的networking上遇到问题:连接到SSID后,iphone / ipad立即打开Captivenetworking助理(CNA) – 它像一个缩小的浏览器,没有导航button等 – 显示我们的欢迎页面(准备好让用户在networking中validation他的MAC,以便给他上网)。 这个CNA是iOS的一个function,并自动发生。

我在这个论坛上环顾四周,如何让用户通过点击一个链接(在CNA中)来打开他的Safari浏览器,从而将他从CNA中发送到Safari(我更喜欢他在那里)。

我search的短语,如:“如何设置一个链接打开Safari”,但我得到的结果关于使用手机的人做这样的事情…
一位用户谈到了使用window.open(myURL,“_system”),但我不知道这是否解决了我的问题。

基本上我的计划是: – 让我的欢迎页面(用户连接到我的SSID后显示的页面)检测用户设备的浏览器types。 我的欢迎页面位于我的控制器的围墙花园的一个站点,因此每个设备都可以看到欢迎页面(是否具有完全的互联网访问)。 – 如果用户有iOS设备,CNA浏览器会自动打开。 我的控制器检测到设备有一个CNA浏览器,并加载一个简单的页面与消息(如):“点击这里开始导航” – 在接下来的几秒钟(当用户正在消化消息),我的控制器给用户MAC完全的互联网访问 – 当用户点击CNA浏览器中的链接时,CNAclosures,然后打开Safari,并强制Safari打开目的地欢迎页面(我希望我的用户是,根据他的天线连接的)。

我真的希望一切都有意义

我发现这个链接关于在这个论坛的CNA浏览器: 旁观苹果计算机networking助理login在iOS 7

但是它说的是让用户从一开始就打开Safari(禁用CNAfunction),“希望”用户打开Safari(而不是直接转到他的一个应用程序)。 我更喜欢用户必须“点击继续”,这使Safari打开,他看到我的欢迎页面。

从Ryan的答案中提取如何在Safari中打开外部链接,而不是应用程序的UIWebView?

要将特定的链接切换到Safari,只需将target =“_ system”添加到链接即可

<a href="http://www.domain.com/" target="_system">Link Text</a> 

或者为了捕获你的JavaScript中所有包含target =“_ blank”的链接,包含jQuery并将它们传递给window.open中的'_system'参数。 这将适用于iOS和Android。

 $(document).on('click', 'a[target="_blank"]', function(ev) { var url; ev.preventDefault(); url = $(this).attr('href'); window.open(url, '_system'); }); 

Javascript不能在CNA中完全工作,出于安全原因而被禁用。 目标=“_系统”是一个safarifunction,而不是CNA之一。 ==>简单地说,_system在CNA中失败。

编辑 :这个解决scheme不适用于iOS 10.3之后。 不知道这是一个function或错误: https : //forums.developer.apple.com/thread/75498

编辑2 :显然它在iOS 11上再次运作


有一个简单的方法来做到这一点,如果你有控制强制门户服务器。

当连接到一个wifinetworking时,iOS设备发送一个GET请求到一堆预定义的URL( http://www.apple.com/library/test/success.html ,…),看是否有互联网连接(wispr请求)。 iOS设备期望答案<HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML> 。 如果请求成功,但答案不同(例如您的强制门户页面),则会触发CNA打开。

在这个阶段,CNA认为你没有连接,并会在顶部显示一个Cancelbutton。 无论您做什么,每个链接都将在CNA内部打开,而不是在Safari窗口中打开。 CNA完成后,您可以通过login过程获取用户。 为了查看login过程是否完成并最终build立连接,iOS设备现在将发送另一个wispr请求。 这种情况每40秒发生一次,或者发出HTTP请求(在CNA内导航)。

当你的服务器终于回答Success请求,CNA将标记为已connected ,顶部的button将变为Done 。 在这个阶段,任何链接到外部url将closuresCNA并在Safari中打开:)

所以总结一下,你可以用下面的连接步骤来实现你想要的:

  1. 服务器通过CNA页面回答最初的请求。
  2. 该页面将在CNA中打开。 在该页面中,有一些JavaScript可以立即触发CNA中的导航,例如: <script>window.location.reload(true)</script>这将触发iOS设备立即发送另一个wispr请求
  3. 服务器用<HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>回答这个第二个wispr请求,这将触发CNA标记为已连接
  4. 让你的CNA页面显示一个到外部链接的链接