【问题标题】:iOS: Open a Welcome Page in Safari, not CNA (post-authentication)iOS:在 Safari 中打开欢迎页面,而不是 CNA(身份验证后)
【发布时间】:2015-06-26 23:07:37
【问题描述】:

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

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

拥有的是:

  • 强制门户/强制网络正在运行
  • 连接的用户会在弹出窗口 (CNA) 中显示启动页面
  • 由于我不需要认证,所以此时它们已连接,右上角显示“OK”

想要的是:

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

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

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

【问题讨论】:

标签: ios mobile-safari captivenetwork


【解决方案1】:

您不能让操作系统(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 窗口后自动启动的 safari 页面?

【讨论】:

  • 更新:我所看到的(我今天再次检查)不是自动的。但是,当您单击 CNA 中的链接时,它会在 Safari 中打开。这对我来说很好,但我不能复制它。
  • @Tom:不是自动的?你的意思是 ?你能张贴一些屏幕截图吗?如果您使用 Wispr 显示您的 CNA,请告诉我?
  • 您找到解决方案了吗?
  • 我认为它适用于 iOS 10.3 之前的版本,但您可以打开 Safari 以外的自定义应用程序方案。有人可以确认吗?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    秘诀是向 iOS 客户端发送一个 HTML 响应,其中包含一个仅包含“Success”一词的 BODY 元素。 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>
    

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

    我的用例

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

    当用户点击“同意并连接”时,会发布一个表单,该表单在强制网络门户设备上执行他们的 MAC 授权。

    网络服务器返回我自己的带有白色文本的success.html,并且javascript重定向到或者用户请求的URL(对于那些用户使用他们的手机手动浏览网站的情况)浏览器)或品牌欢迎页面。

    TL;DR:

    1. 用户连接到强制门户

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

    3. Mobile CNA 加载强制门户登录页面

    4. 用户点击“同意并连接”,向我的执行身份验证的网络服务器发出 POST 请求

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

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

    7. CNA webview 窗口在 Android 中自动关闭,或者用户可以在 iOS CNA webview 窗口上单击“完成”将其关闭

    【讨论】:

    • 这会在 Safari 或 CNA 中打开 welcome.html 吗?我需要它在 Safari 中打开,因为我在门户中提供的功能是允许用户从图像库中下载图像,而 CNA 不允许这样做。
    • 在我之前的评论中错过了这个。你可以看看Click a link to open in Safari这个问题。我正在根据我们的条款和条件测试该解决方案。 CNA 的目的是让用户连接到网络,而不一定让他们与热点的提供者进行交互。 CNA 窗口的顶角甚至还有完成/取消按钮,这样就无法使用它在网站上进行任何实际工作。
    • 这不起作用。 “单击链接以在 Safari 中打开”仅在 Safari 和 Mail 中有效。不在 CNA 中。
    • 谢谢。当我发表评论时,我对我链接的其他答案没有太大信心,但仍在测试中。它在我的应用程序中也不起作用,但我忘了跟进。感谢您指出这一点。
    • @IanMarcinkowski 你上面的回答对我来说是合格的。它有助于理解幕后的机制和过程。感谢那 !但它没有回答“开放式野生动物园”这一问题。顺便说一句,是否有人已经看到这种现象:safari 从 CNA 窗口打开?
    【解决方案4】:

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

    【讨论】:

    • 10.3 有问题,我切换到 11 测试版。
    【解决方案5】:

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

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

    如果链接是则不会断开

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

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

    【讨论】:

    • 这可以自动化,而不是等待点击,而是为用户点击它?
    猜你喜欢
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2010-12-23
    • 1970-01-01
    • 2017-01-19
    • 2018-01-24
    相关资源
    最近更新 更多