use*_*787 24 macos mobile-safari wifi ios captivenetwork
我们在网络上遇到iOS设备问题(ipads,iphone等):连接到SSID后,iphone/ipad立即打开强制网络助手(CNA) - 它就像一个没有导航按钮等的缩小浏览器 - 显示我们的欢迎页面(准备让用户在网络中验证他的MAC以给他上网).这个CNA是iOS的功能,自动发生.
我在这个论坛上四处寻找如何让用户通过点击链接(在CNA中)打开他的Safari浏览器,从而将他从CNA发送到Safari(这是我希望他的地方).
我搜索了一些短语,例如:"如何设置一个在safari中打开的链接",但我得到的结果是关于使用phonegap做这种事情的人...
一个用户谈到使用window.open(myURL,'_ system`)但是我不知道这是否解决了我的问题.
基本上我的计划是: - 让我的欢迎页面(用户连接到我的SSID后显示的页面)检测用户设备的浏览器类型.我的欢迎页面托管在我的控制器的Walled Garden中的一个站点,因此每个设备都可以看到欢迎页面(无论他们是否具有完全的互联网访问权限). - 如果用户有iOS设备,则CNA浏览器会自动打开.我的控制器检测到设备有一个CNA浏览器,并加载一个带有消息的简单页面(如):"点击此处开始导航" - 在接下来的几秒钟内(当用户消化消息时),我的控制器给用户MAC完全互联网访问 - 当用户在CNA浏览器中点击该链接时,CNA关闭然后打开Safari,并强制Safari打开目标欢迎页面(我希望我的用户在哪里,具体取决于他所使用的天线)连接的).
我真的希望一切都有道理......
我在这个论坛中找到了关于CNA浏览器的链接: Bypasses Apple Captive Network Assistant在iOS 7中登录
但它会让用户从一开始就打开Safari(禁用CNA功能),"希望"用户打开Safari(而不是直接转到他的某个应用程序).我更喜欢用户必须"点击继续",这使Safari打开,他看到我的欢迎页面.
编辑:此解决方案在 iOS 10.3 之后不起作用。不确定这是功能还是错误:https : //forums.developer.apple.com/thread/75498
EDIT2:显然它在 iOS 11 上再次运行
如果您可以控制强制门户服务器,则有一种简单的方法可以做到这一点。
当连接到 wifi 网络时,iOS 设备会向一堆预定义的 url ( http://www.apple.com/library/test/success.html, ...)发送 GET 请求,以查看是否有 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 中打开 :)
总而言之,您可以通过以下连接步骤实现您想要的:
<script>window.location.reload(true)</script>这将触发 iOS 设备立即发送另一个 wispr 请求<HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>,这将触发 CNA 标记为已连接小智 3
摘自 Ryan 的回答:How can I open an external link in Safari not the app's UIWebView?
要将特定链接切换到 Safari,只需将 target="_system" 添加到链接中,如下所示
<a href="http://www.domain.com/" target="_system">Link Text</a>
Run Code Online (Sandbox Code Playgroud)
或者要捕获 javascript 中具有 target="_blank" 的所有链接,请包含 jQuery 并使用 '_system' 参数将它们传递给 window.open。这适用于 iOS 和 Android。
$(document).on('click', 'a[target="_blank"]', function(ev) {
var url;
ev.preventDefault();
url = $(this).attr('href');
window.open(url, '_system');
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12033 次 |
| 最近记录: |