我正在运行一个强制网络门户,目标受众只是移动设备 . 我想打开"welcome page"给他在CNA中验证的用户 after . 此页面应在(移动)Safari中打开,而不是在CNA中打开,因为它包含在有限的CNA环境中不起作用的交互式元素 .
我以前见过这个在其他门户网站工作,但我不知道他们是怎么做的,也不知道经过长时间的研究后甚至是多少 .
我 have 是什么:
-
强制门户网站/专属网络正在运行
-
用户连接获取弹出窗口中显示的启动页面(CNA)
-
因为我不需要身份验证,所以此时它们已连接,而右上角的按钮显示"OK"
我 want 是什么:
- 此启动页面上的一个链接或按钮,用于打开Safari窗口
要么
- 一些JavaScript,重定向,以及在CNA关闭时打开Safari窗口的任何其他内容 .
到目前为止我找不到任何东西(例如使用target =“_ system”) . 有谁知道这些酒店和其他门户网站如何设法做到这一点,做到了吗?
5 回答
You cannot 使操作系统(OS X或iOS)打开Safari . 当iOSX检测到有围墙的花园(强制门户)时,它会启动CNA . 那是 .
CNA≠Safari . 让我们试试
<a href="..." target="_blank">test</a>
任何尝试打开另一个CNA窗口失败 .让我们试试
<a href="..." target="_system">test</a>
任何尝试打开Safari失败(_system仅适用于iOS应用程序中的Safari,Mail和Safari webviews)对我来说:回答=不可能 .
但我想知道:有没有人已经 seen 这种现象 . 你有没有 Seen 在呈现CNA窗口后自动启动的safari页面?
iOS 11中引入了另一个错误,即在Safari中打开链接后CNA不会自行关闭 .
请参考此处的讨论:https://forums.developer.apple.com/thread/75498#221482
秘诀是使用仅包含单词"Success"的BODY元素向iOS客户端发送HTML响应 . iOS CNA期望返回类似http://www.apple.com/library/test/success.html的内容 .
例如:成功成功
您可以使用javascript重定向iOS CNA窗口:
此外,您可以通过在BODY标记上使用STYLE属性将正文文本更改为白色来隐藏"Success"消息 . iOS CNA应用程序没有't seem to be looking for a page that exactly conforms to Apple'的success.html . 它似乎正在寻找包含单词"Success"的BODY元素 .
我的用例
我使用的强制门户网站要求用户同意服务条款 . 移动设备将使用其CNA(Captive Network Assistant)检测强制网络门户,并使用强制网络门户登录页面打开操作系统级别的浏览器窗口 .
当用户点击“同意并连接”时,表单将被POST,该表单在强制门户网站设备上执行其MAC的授权 .
网络服务器返回我自己的success.html,白色文本和javascript重定向到用户请求的URL(对于用户使用移动浏览器手动浏览网站的情况)或品牌欢迎页面 .
TL; DR:
用户连接到强制网络门户
移动设备检测到强制网络门户
Mobile CNA加载强制门户登录页面
用户单击“同意并连接”,向我的网络服务器发出POST请求,该请求执行身份验证
HTTP 302重定向从指向我的网络服务器上的success.html的POST URL返回,该URL包含BODY元素之后的javscript重定向 This triggers the iOS CNA web view to detect that it has successfully connected to the network
CNA登录窗口被重定向到我的品牌welcome.html
CNA webview窗口在Android中自动关闭,或者用户可以在iOS CNA webview窗口中单击“完成”关闭它
我设法通过执行以下操作让我的iOS 9.1设备在mikrotik环境中重定向:
更改alogin.html页面(您的连接页面)以获得已连接的 Headers 和连接的主体,如下所示:
在较新的设备10.3.1上,这似乎不再有用,目前正在测试它的变化 . https://forums.developer.apple.com/thread/75498
您需要确保锚标记指向绝对URL而不是相对URL . 例如你的链接应该是
如果链接是,它不会爆发
另请注意,这仅在互联网可用/单击链接时连接用户时才有效 . 在iOS CNA中,右上角按钮将在连接时变为'Done' . 所以在状态时基本上点击绝对链接CNA是
Done
将关闭CNA并将加载Safari中的链接 .