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

时间:2015-04-20 09:39:27

标签: ios mobile-safari captivenetwork

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

我以前见过这个在其他门户网站工作过,但我不知道他们是怎么做的,经过长时间的研究后也无法弄明白。

拥有的是:

  • 强制网络门户/专属网络正在运作
  • 用户连接获取弹出窗口(CNA)中显示的启动页面
  • 因为我不需要身份验证,所以此时它们已连接,右上角按钮显示" OK"

想要的是:

  • 此启动页面上的一个链接或按钮,用于打开Safari窗口

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

到目前为止我找不到任何内容(例如使用target =" _system"被提及)。有谁知道这些酒店和其他门户以某种方式设法做到了,做到了吗?

5 个答案:

答案 0 :(得分:5)

您无法使操作系统(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网页浏览)

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

但我想知道:是否有人已经看到这种现象。你有没有看过在出现CNA窗口后自动启动的野生动物园页面?

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

秘诀是向iOS客户端发送HTML响应,其中BODY元素仅包含单词&#34; Success&#34;。 iOS CNA期望返回http://www.apple.com/library/test/success.html之类的内容。

例如:               成功                        成功          

您可以使用javascript:

重定向iOS CNA窗口
<script type="text/javascript">
    window.location.href = "yourdomain.com/welcome.html";
</script>

此外,您可以隐藏&#34;成功&#34;通过在BODY标记上使用STYLE属性将正文文本更改为白色来显示消息。 iOS CNA应用程序似乎没有找到完全符合Apple的success.html的页面。 似乎正在寻找包含单词&#34;成功&#34;。

的BODY元素。

我的用例

我使用的强制网络门户要求用户同意服务条款。移动设备将使用其CNA(Captive Network Assistant)检测强制网络门户,并使用强制网络门户登录页面打开操作系统级别的浏览器窗口。

当用户点击&#34;同意&amp;连接&#34;表单是POSTed,它在强制网关设备上执行其MAC的授权。

网络服务器返回我自己的success.html,其中包含白色文本,javascript重定向到 用户请求的网址(对于用户使用移动设备手动浏览网站的情况)浏览器)或品牌欢迎页面。

TL; DR:

  1. 用户连接到强制网络门户

  2. 移动设备检测到强制网络门户

  3. 移动CNA加载强制网络门户登录页面

  4. 用户点击&#34;同意&amp;连接&#34;,向执行身份验证的网络服务器发出POST请求

  5. 从指向我的网络服务器上的success.html的POST网址返回HTTP 302重定向,其中包含BODY元素之后的javscript重定向这会触发iOS CNA Web视图以检测它是否已成功连接到网络

  6. CNA登录窗口被重定向到我的品牌welcome.html

  7. CNA webview窗口在Android中自动关闭,或者用户可以点击&#34;完成&#34;在iOS CNA webview窗口中关闭它

答案 3 :(得分:2)

通过执行以下操作,我设法让我的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

答案 4 :(得分:1)

您需要确保锚标记指向绝对URL而不是相对URL。例如,你的链接应该是

<a href="http://yourdomain.com/home.html">Home</a>

如果链接

,则不会中断
<a href="/home.html">Home</a>

另请注意,只有在点击链接时可以使用互联网/用户连接时,此功能才有效。在iOS CNA中,右上角的按钮将变为“完成”按钮。连接时因此,当CNA的状态为Done时,基本上单击绝对链接将关闭CNA并将在Safari中加载链接。