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

1yjd4xko  于 2023-05-19  发布在  iOS
关注(0)|答案(5)|浏览(131)

我正在运行一个强制门户网站,目标受众是移动的设备。我想在用户**通过CNA认证后为他打开一个“欢迎页面”。此页面应该在(移动的)Safari中打开,而不是在CNA中打开,因为它包含在有限的CNA环境中无法工作的交互式元素。
我以前在其他门户网站上看到过这种情况,但我不知道他们是如何做到这一点的,即使经过长时间的研究也无法弄清楚。
我*************************

  • 强制门户/强制网络正在工作
  • 连接的用户获得弹出窗口中显示的启动页面(CNA)
  • 因为我不需要身份验证,它们在这一点上是连接的,右上角的按钮显示“OK”

我想要的是:

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

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

到目前为止我还没有找到任何东西(例如)。using target="_system”was mentioned)works.有没有人知道这些酒店和其他门户网站是如何设法做到这一点的?

4sup72z8

4sup72z81#

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

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

如果链接是

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

还请注意,这将只在互联网可用/用户连接时,点击链接工作。在iOS CNA中,连接时右上角的按钮将变为“完成”。因此,当CNA的状态为Done时,单击绝对链接将关闭CNA并将在Safari中加载链接。

q3aa0525

q3aa05252#

您无法使操作系统(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)
回答:不可能。
但我想知道有没有人已经 * 看到过这种现象。你有没有见过一个Safari页面自动启动后,已提出的CNA窗口?

nkcskrwz

nkcskrwz3#

iOS 11中引入了另一个错误,例如在Safari中打开链接后,CNA不会自行关闭。
请参阅此处的讨论:https://forums.developer.apple.com/thread/75498#221482

ht4b089n

ht4b089n4#

秘诀是向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>

此外,您可以通过在<body>标记上使用style属性将正文文本更改为白色来隐藏“Success”消息。iOS CNA应用程序似乎并没有寻找完全符合Apple success.html的页面;它似乎只是在寻找一个包含单词“Success”的<body>元素。

我的用例

我正在使用的强制门户需要用户同意服务条款。移动终端将用其CNA检测强制门户,并打开具有强制门户登录页面的OS级浏览器窗口。
当用户单击“同意并连接”时,将显示一个艾德,该表单在强制门户设备上执行MAC授权。
Web服务器返回我自己的带有白色文本的success.html,JavaScript重定向到用户请求的URL(对于用户使用移动的浏览器手动浏览网站的情况)或品牌欢迎页面。

TL;DR:

1.用户连接到强制网络门户
1.移动终端检测强制门户
1.移动的CNA加载强制门户登录页面
1.用户单击“同意并连接”,向执行身份验证的Web服务器发出POST请求

  1. HTTP 302重定向是从指向我的Web服务器上的success.htmlPOST URL返回的,它在<body>元素之后包含一个JavScript重定向;这会触发iOS CNA Web视图检测是否已成功连接到网络
  2. CNA登录窗口重定向到我的品牌welcome.html
  3. CNA网络视图窗口在Android中自动关闭,或者用户可以在iOS CNA网络视图窗口上单击“完成”将其关闭
u5rb5r59

u5rb5r595#

我设法让我的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

相关问题