Ios 专属Wifi弹出窗口:单击链接打开Safari

Ios 专属Wifi弹出窗口:单击链接打开Safari,ios,macos,wifi,mobile-safari,captivenetwork,Ios,Macos,Wifi,Mobile Safari,Captivenetwork,我们的iOS设备(ipad、iphone等)网络出现了问题:连接到SSID后,iphone/ipad会立即打开Capture network Assistant(CNA),它就像一个没有导航按钮的缩小浏览器,显示我们的欢迎页面(准备好让用户在网络中验证他的MAC电脑,以便为他提供internet)。此CNA是iOS的一个功能,并自动进行 我在这个论坛上四处寻找如何让用户通过点击一个链接(在CNA中)打开他的Safari浏览器,从而将他从CNA发送到Safari(我更希望他在这里) 我搜索了诸如“

我们的iOS设备(ipad、iphone等)网络出现了问题:连接到SSID后,iphone/ipad会立即打开Capture network Assistant(CNA),它就像一个没有导航按钮的缩小浏览器,显示我们的欢迎页面(准备好让用户在网络中验证他的MAC电脑,以便为他提供internet)。此CNA是iOS的一个功能,并自动进行

我在这个论坛上四处寻找如何让用户通过点击一个链接(在CNA中)打开他的Safari浏览器,从而将他从CNA发送到Safari(我更希望他在这里)

我搜索了诸如“如何设置在safari中打开的链接”之类的短语,但我得到了一些关于人们使用phonegap做这种事情的结果…
一位用户谈到使用 window.open(myURL,“\u系统”) 但我不知道这是否解决了我的问题

基本上,我的计划是: -让我的欢迎页面(用户连接到我的SSID后显示的页面)检测用户设备的浏览器类型。我的欢迎页面位于控制器的围墙花园中的一个站点上,因此每个设备都可以看到该欢迎页面(无论它们是否具有完全的internet访问权限)。 -如果用户有iOS设备,CNA浏览器将自动打开。“我的控制器”检测到该设备有CNA浏览器,并加载一个简单页面,其中包含消息(如):“单击此处开始导航” -在接下来的几秒钟内(当用户消化信息时),我的控制器为用户的MAC提供完全的互联网访问 -当用户在CNA浏览器中单击该链接时,CNA将关闭然后打开Safari,并强制Safari打开目标欢迎页面(我希望用户所在的位置取决于他连接的天线)

我真的希望一切都有意义

我在这个论坛上找到了关于CNA浏览器的链接:


但它说让用户从一开始就打开Safari(禁用CNA功能),“希望”用户打开Safari(而不是直接进入他的应用程序)。我更喜欢用户必须“单击继续”,这会让Safari打开,他会看到我的欢迎页面。

摘自Ryan在上的回答

要将特定链接切换到Safari,只需将target=“\u system”添加到链接中,如中所示

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

Javascript在CNA中不能完全工作,出于安全原因,它被禁用。 target=“_system”是safari的一项功能,而不是CNA功能。
==>简单地说,CNA中的系统出现故障。

编辑:此解决方案在iOS 10.3之后不起作用。不确定这是功能还是错误:

EDIT2:显然它在iOS 11上又能工作了


如果您可以控制捕获门户服务器,那么有一种简单的方法可以做到这一点

当连接到wifi网络时,iOS设备向一组预定义的URL发送GET请求(
http://www.apple.com/library/test/success.html
,…),以查看是否存在Internet连接(wispr请求)。iOS设备希望得到答案
SuccessSuccess
。如果请求成功,但答案不同(例如,您的捕获门户页面),它会触发CNA打开

在此阶段,CNA认为您未连接,并将在顶部显示一个
取消
按钮。无论您做什么,每个链接都将在CNA内部打开,而不是在Safari窗口中打开。CNA完成后,您可以让您的用户完成登录过程。以便查看登录过程是否完成,连接是否最终建立在这种情况下,iOS设备会时不时地发送另一个wispr请求。这种情况每40秒发生一次,或者每当发出HTTP请求时(CNA内的导航)

当您的服务器最终回答wispr请求时,
成功
,CNA将标记为
已连接
,顶部的按钮将变为
完成
。在此阶段,任何指向外部url的链接都将关闭CNA并在Safari中打开:)

总而言之,您可以通过以下连接步骤实现所需:

  • 服务器使用您的CNA页面回答初始wispr请求
  • 该页面在CNA中打开。在该页面中,有一些JavaScript可立即触发CNA内的导航,例如:
    window.location.reload(true)
    这将触发iOS设备立即发送另一个wispr请求
  • 服务器用
    SuccessSuccess
    响应第二个wispr请求,这将触发CNA标记为已连接
  • 让您的CNA页面显示指向外部url的链接

  • 如果我错了,请纠正我,但我认为这根本不可能。通常,由于浏览器操作而允许打开的唯一应用程序是邮件或默认浏览器。否则,人们可能仅仅因为访问了网页就随机强迫其他人打开应用程序。@user3570787我想知道我是否见过它。我的目标是相同的,但是嗯…我已经看到它工作了。我想没有。我有一个类似的问题,我已经尝试使用target=“\u系统”的链接,但它们是在CNA中打开的,而不是在Safari中。有人知道它在工作吗?我看到它在热点中工作,所以这是可能的。这是一个错误的答案,抱歉。这不起作用。为什么这是一个无效的最高版本?iOS 9 CNA中既没有系统也没有空白触发Safari。只是停留在CNA中。有人找到了解决方案吗?成功实现了通过在CNA页面中插入1秒延迟自动打开Safari。然后它使用click()单击元素,并在Safari中打开。URL是绝对的,目标是未设置的(不适用于_blank)。wispr可能会毫不延迟地收到预期的响应,但链接会以无休止的循环方式导航到CNA。值得注意的是,如果我插入延迟,那么第二个wispr请求会在链接导航可以预测之前出现,因此导航到链接不是真正的触发因素。看看你自己:我已经实现了
    $(document).on('click', 'a[target="_blank"]', function(ev) {
      var url;
    
      ev.preventDefault();
      url = $(this).attr('href');
      window.open(url, '_system');
    });