Captive Wifi 弹出窗口:单击链接打开 Safari

2024-05-27

我们的 iOS 设备(ipad、iphone 等)网络出现问题:连接到 SSID 后,iphone/ipad 立即打开强制网络助手 (CNA) - 它就像一个缩小版的浏览器,没有导航按钮等- 显示我们的欢迎页面(准备好让用户在网络中验证他的 MAC,以便为他提供互联网)。此 CNA 是 iOS 的一项功能,并且会自动发生。

我在这个论坛上四处寻找如何让用户通过单击链接(在 CNA 中)打开他的 Safari 浏览器,从而将他从 CNA 转到 Safari(这是我希望他所在的位置)。

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

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

我真的希望一切都有意义......

我在此论坛中找到了有关 CNA 浏览器的链接:在 iOS 7 中绕过 Apple Captive Network Assistant 登录 https://stackoverflow.com/questions/19682624/bypasses-apple-captive-network-assistant-login-in-ios-7

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


EDIT:此解决方案在 iOS 10.3 之后不起作用。不确定这是一个功能还是一个错误:https://forums.developer.apple.com/thread/75498 https://forums.developer.apple.com/thread/75498

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


如果您可以控制强制门户服务器,则有一种简单的方法可以做到这一点。

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

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

当你的服务器最终回答时Success对于 wispr 请求,CNA 将标记为connected,顶部的按钮将变为Done。在此阶段,任何指向外部 URL 的链接都将关闭 CNA 并在 Safari 中打开:)

总而言之,您可以通过以下连接步骤来实现您想要的目的:

  1. 服务器使用您的 CNA 页面应答初始 wispr 请求。
  2. 该页面在 CNA 中打开。在该页面中,有一些 JavaScript 可以立即触发 CNA 内的导航,例如:<script>window.location.reload(true)</script>这将触发 iOS 设备立即发送另一个 wispr 请求
  3. 服务器回答第二个 wispr 请求<HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>,这将触发 CNA 将其标记为已连接
  4. 让您的 CNA 页面显示指向外部 url 的链接
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Captive Wifi 弹出窗口:单击链接打开 Safari 的相关文章

  • 如何使用 Swift 使用 TouchID?

    Apple 为 iOS 8 的 TouchID 实现提供的文档采用 Objective C 语言 有 Swift 版本吗 Objective C IBAction touchIDAvailable UIButton touchIDAvail
  • Firebase 身份验证问题 - 通过电子邮件地址检查用户是否存在

    我在 Firebase 上创建了一个帐户 它有效 但现在我想阻止人们使用已存在的电子邮件地址创建帐户 这是代码 DatabaseManager shared userExists with email completion weak sel
  • 减少 CoreData 的调试输出?

    我正在开发一个使用 CoreData 的 iOS macOS 项目 它工作正常 但它会向控制台输出大量调试信息 这使得控制台无法使用 因为我的打印语句隐藏在所有与 CoreData 相关的内容中 我有一个非常简单的 CoreData 设置
  • 如何让按钮闪烁?

    我试图在扫描正确时将按钮的颜色 只是闪烁 闪烁 更改为绿色 在出现问题时将按钮的颜色更改为红色 我可以用这样的视图来做到这一点 func flashBG UIView animateWithDuration 0 7 animations s
  • iOS - UITableViewCell 使文本加粗

    我有一个字符串 NSString userInfo James Johnson james 我想做的就是大胆James Johnson并保留 james正常字体 所以我尝试过的是使用NSAttributedString但为了完成这个过程 我
  • 如何在 OSX 上安装 LaTeX .sty 文件?

    我设置了一个 LaTeX 项目 tex documents some file tex support todonotes sty where some file tex uses todonotes usepackage colorinl
  • 如何检测用户是否第一次打开应用程序[重复]

    这个问题在这里已经有答案了 是否可以检测用户是否是第一次打开iOS应用程序 使用Objective C 我想在用户第一次打开应用程序时显示欢迎消息 但之后不再向他们显示 我正在寻找类似的东西 BOOL firstTime AppDelega
  • 无法在 ios 应用程序中通过 googlecast 正确投射视频

    我正在开发一个基于 AVPlayer 的自定义视频播放器项目 尝试整合谷歌演员 我已经根据谷歌图进行了集成 https codelabs developers google com codelabs cast videos ios http
  • 在 iOS 应用程序中拨打电话

    我有一些代码尝试在应用程序中进行调用 但它似乎不起作用 UIApplication myApp UIApplication sharedApplication NSString theCall NSString stringWithForm
  • jQuery:离线后 POST 出错(iOS 和 Chrome)

    我构建了一个具有离线功能的 HTML5 Web 应用程序 使用 AppCache 程序流程为 Online 在网络上时 应用程序预加载一些基本信息 工作 Offline 用户拿着装有应用程序的平板电脑offline 然后在应用程序上执行他们
  • 将类型传递给通用 Swift 扩展,或者理想情况下推断它

    说你有 class Fancy UIView 你想找到所有兄弟姐妹Fancy意见 没问题 https stackoverflow com q 37232743 294884 for v UIView in superview subview
  • iOS 7 tabBar 横线,如何去掉?

    Apple 在 iOS 7 中的 tabBar 上添加了一条细线 该线应该在 tabBar 和 UI 之间起到阴影或淡入淡出的作用 由于我使用的是定制的 tabBar 这条线非常令人恼火 你如何删除它 请告诉我这是可能的 否则我需要重新设计
  • 未知异常和崩溃

    当我尝试快速滚动表格视图或从远程重新加载数据时 我的应用程序崩溃了 当我先进行远程获取然后滚动表格视图时 一切似乎都工作正常 我不知道下面的崩溃日志意味着什么 它只是有时工作正常 有时崩溃 Incident Identifier 710A1
  • 如何使用phonegap在iOS应用程序中防止键盘推送webview

    当屏幕底部的输入字段获得焦点时 键盘会向上推我的网络视图 并且页面的上部不再可见 我想防止键盘推高网络视图 有人有主意吗 对焦 设置window scrollTo 0 0 这可以防止键盘完全推高 webview input on focus
  • UICollectionView setLayout:animated: 不保留 zIndex

    我注意到打电话时setLayout animated in a UICollectionView要在两个布局之间切换 当前可见的单元格不遵循zIndex它的布局属性已设置在layoutAttributesForItemAtIndexPath
  • 使用输入类型 = 文件捕获照片时移动 safari 崩溃

    我正在使用输入类型文件在 iOS 中启动相机 我正在使用以下代码行
  • iOS:Facebook 登录访问令牌错误:由于模拟器错误,回退到从 NSUserDefaults 加载访问令牌

    根据说明进行配置后 我不断收到此错误 并且无法在我的应用程序上成功使用 Facebook 登录 我在 XCode 8 1 上运行它并使用 iOS 10 1 模拟器 我按照 Facebook iOS SDK 指南中的步骤操作 并将 Faceb
  • Mac 上的 Delphi - 可能吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我负责一个 Delphi Win32 项目管理应用程序 我刚刚完成了向 Delphi 2009 的迁移
  • Unwind segue 的用途是什么以及如何使用它们?

    iOS 6 和 Xcode 4 5 有一个称为 Unwind Segue 的新功能 展开转场可以允许过渡到故事板中场景的现有实例 除了 Xcode 4 5 发行说明中的 这个简短条目之外 UIViewController 现在似乎还有几个新
  • 如何在 UITableView 的 switch 语句中创建变量?

    我正在构建一个包含三个部分的 tableView 我已经完成了前两个工作 但最后一个有点阻力 我的问题似乎涉及尝试在 switch 语句中声明变量 实际上是嵌套的 switch 语句 据我所知 这不是一个好主意 但在这种情况下 这似乎是唯一

随机推荐