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

问题描述 投票:0回答:5

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

我以前在其他门户网站上看到过这个工作,但我不知道他们是怎么做到的,即使经过长时间的研究也无法弄清楚。

拥有的是:

  • 强制门户/强制网络正在运行
  • 连接的用户获得弹出窗口中显示的启动页面 (CNA)
  • 因为我不需要认证,所以此时连接上了,右上角的按钮显示“OK”

想要的是:

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

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

到目前为止我发现的任何东西(例如提到使用 target="_system")都没有用。有谁知道这些酒店和其他门户网站如何设法做到这一点?

ios mobile-safari captivenetwork
5个回答
5
投票

您不能使操作系统(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 页面?


3
投票

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

参考这里的讨论:https://forums.developer.apple.com/thread/75498#221482


3
投票

秘诀是向 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——对于用户使用他们的移动浏览器手动浏览网站的情况——或品牌欢迎页面.

长话短说:

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

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


1
投票

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

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

如果链接是不爆

<a href="/home.html">Home</a>

另请注意,这仅在互联网可用/用户在单击链接时已连接时才有效。在 iOS CNA 中,连接后右上角的按钮将变为“完成”。因此,当 CNA 的状态为

Done
时,基本上单击绝对链接将关闭 CNA 并在 Safari 中加载链接。

© www.soinside.com 2019 - 2024. All rights reserved.