我正在运行一个强制门户,目标受众仅为移动设备。我想在用户 在 CNA 中进行身份验证后打开一个“欢迎页面”。此页面应在(移动)Safari 中打开,而不是在 CNA 中打开,因为它包含在有限的 CNA 环境中不起作用的交互元素。
我以前在其他门户网站上看到过这个工作,但我不知道他们是怎么做到的,即使经过长时间的研究也无法弄清楚。
我拥有的是:
我想要的是:
或
到目前为止我发现的任何东西(例如提到使用 target="_system")都没有用。有谁知道这些酒店和其他门户网站如何设法做到这一点?
您不能使操作系统(OS X 或 iOS)打开 Safari。 当 iOSX 检测到 walled garden(强制门户)时,它会启动 CNA。 那就是。
CNA≠Safari。 来试试吧
<a href="..." target="_blank">test</a>
任何试图打开另一个 CNA 窗口的尝试都会失败。
让我们试试
<a href="..." target="_system">test</a>
任何打开 Safari 的尝试都失败了(_system 仅适用于 iOS 应用程序中的 Safari、Mail 和 Safari webviews)
对我来说:答案=不可能。
但是我想知道:有没有人已经seen这个现象。你有没有看到在 CNA 窗口出现后自动启动的 safari 页面?
iOS 11 中引入了另一个错误,即 CNA 在 Safari 中打开链接后不会自行关闭。
参考这里的讨论:https://forums.developer.apple.com/thread/75498#221482
秘诀是向 iOS 客户端发送一个 HTML 响应,其中包含一个仅包含单词“Success”的
<body>
元素。 iOS CNA(Captive Network Assistant)期望返回类似 http://www.apple.com/library/test/success.html 的内容。
例如:
<html>
<head>
<title>Success</title>
</head>
<body>
Success
</body>
</html>
您可以使用 JavaScript 重定向 iOS CNA 窗口:
<script type="text/javascript">
window.location.href = "yourdomain.com/welcome.html";
</script>
此外,您可以通过在
style
标签上使用 <body>
属性将正文文本更改为白色来隐藏“成功”消息。 iOS CNA 应用程序似乎并没有在寻找完全符合苹果success.html
的页面; 似乎只是在寻找包含“成功”一词的<body>
元素。
我使用的强制门户要求用户同意服务条款。移动设备将使用其 CNA 检测强制门户,并打开带有强制门户登录页面的操作系统级浏览器窗口。
当用户单击“同意并连接”时,会生成一个表格,
POST
ed,该表格在强制门户设备上执行其 MAC 授权。
网络服务器返回我自己的
success.html
和白色文本,JavaScript 重定向到 用户请求的 URL——对于用户使用他们的移动浏览器手动浏览网站的情况——或品牌欢迎页面.
POST
请求POST
URL 返回,指向我的网络服务器上的 success.html
,它在 <body>
元素之后包含一个 JavScript 重定向; 这会触发 iOS CNA web 视图以检测它已成功连接到网络welcome.html
通过执行以下操作,我设法让我的 iOS 9.1 设备在 mikrotik 环境中重定向:
更改 alogin.html 页面(您的连接页面)以具有连接的标题和连接的主体,如下所示:
<html>
<head>
<title>Success</title>
</head>
<body>
Success
<script>
function addElement(absoluteurl)
{
var anchor = document.createElement('a');
anchor.href = absoluteurl;
window.document.body.insertBefore(anchor, window.document.body.firstChild);
setTimeout(function(){ anchor.click(); }, 1000);
// document.body.appendChild(elemDiv); // appends last of that element
}
addElement("http://www.google.com");
</script>
</body>
在较新的设备 10.3.1 上,这似乎不再有效,目前正在测试它的变体。 https://forums.developer.apple.com/thread/75498
您需要确保锚标记指向绝对 URL 而不是相对 URL。例如你的链接应该是
<a href="http://yourdomain.com/home.html">Home</a>
如果链接是不爆
<a href="/home.html">Home</a>
另请注意,这仅在互联网可用/用户在单击链接时已连接时才有效。在 iOS CNA 中,连接后右上角的按钮将变为“完成”。因此,当 CNA 的状态为
Done
时,基本上单击绝对链接将关闭 CNA 并在 Safari 中加载链接。