iOS:在Safari中打开欢迎页面,而不是CNA(后身份验证)



我正在运行一个专属门户,目标受众仅为移动设备。我想在用户在CNA中进行身份验证后,为他打开一个"欢迎页面"。这个页面应该在(移动)Safari中打开,而不是在CNA中打开。因为它包含在有限的CNA环境中不起作用的交互式元素。

我以前在其他门户网站上看到过这种情况,但我不知道他们是如何做到的,即使经过长时间的研究,我也不知道如何做到。

拥有的是:

  • 专属门户/专属网络正在工作
  • 连接的用户获得弹出窗口中显示的启动页面(CNA)
  • 由于我不需要身份验证,因此此时它们已连接,右上角的按钮显示"确定">

我想要的是:

  • 此启动页面上打开Safari窗口的链接或按钮

  • 一些JavaScript、重定向,以及在CNA关闭时打开Safari窗口的其他内容

到目前为止,我发现任何东西都不起作用(例如,使用target="_system")。有人知道这些酒店和其他门户网站是如何做到的吗?

您不能使操作系统(OS X或iOS)打开Safari。当iOSX检测到围墙花园(圈养门户)时,它会启动CNA。就是。

CNA≠Safari。让我们试试<a href="..." target="_blank">test</a>任何打开另一个CNA窗口的尝试都会失败。

让我们试试<a href="..." target="_system">test</a>任何打开Safari的尝试都会失败(系统仅适用于iOS应用程序中的Safari、邮件和Safari网络视图)

对我来说:答案=不可能。

但我想知道:有没有人已经看到了这种现象。您是否曾看到在显示CNA窗口后自动启动的safari页面?

秘密是向iOS客户端发送一个HTML响应,其中包含一个仅包含单词"的<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>

此外,您可以隐藏";成功;通过在<body>标签上将正文文本更改为具有style属性的白色。iOS CNA应用程序似乎并没有在寻找一个完全符合苹果success.html的页面;似乎只是在寻找包含单词"的CCD_ 7元素;成功";。

我的用例

我使用的专属门户要求用户同意服务条款。移动设备将使用其CNA检测捕获门户,并使用捕获门户登录页面打开操作系统级浏览器窗口。

当用户点击";同意&"连接";,形式是CCD_ 8ed,其在捕获门户设备上执行其MAC的授权。

Web服务器返回我自己的success.html和白色文本,JavaScript重定向到用户请求的URL(对于用户使用移动浏览器手动浏览网站的情况)或品牌欢迎页面。

TL;博士:

  1. 用户连接到专属门户
  2. 移动设备检测到捕获的入口
  3. 移动CNA加载专属门户登录页面
  4. 用户点击";同意&"连接";,向执行身份验证的Web服务器发出POST请求
  5. HTTP 302重定向是从指向我的Web服务器上的success.htmlPOSTURL返回的,该URL在<body>元素之后包含JavScript重定向这会触发iOS CNA web视图来检测它是否已成功连接到网络
  6. CNA登录窗口重定向到我的品牌welcome.html
  7. CNA网页浏览窗口在Android中自动关闭,或者用户可以点击";完成";在iOS CNA web视图窗口中关闭

iOS 11中引入了另一个错误,即CNA在Safari中打开链接后不会自行关闭。

请参阅此处的讨论:https://forums.developer.apple.com/thread/75498#221482

我通过以下操作使我的iOS 9.1设备在mikrotik环境中重定向:

将alogin.html页面(您的连接页面)更改为标题为connected和正文为connected,如下所示:

<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中加载该链接。

相关内容

  • 没有找到相关文章

最新更新