首页 文章

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

提问于
浏览
6

我正在运行一个强制网络门户,目标受众只是移动设备 . 我想打开"welcome page"给他在CNA中验证的用户 after . 此页面应在(移动)Safari中打开,而不是在CNA中打开,因为它包含在有限的CNA环境中不起作用的交互式元素 .

我以前见过这个在其他门户网站工作,但我不知道他们是怎么做的,也不知道经过长时间的研究后甚至是多少 .

have 是什么:

  • 强制门户网站/专属网络正在运行

  • 用户连接获取弹出窗口中显示的启动页面(CNA)

  • 因为我不需要身份验证,所以此时它们已连接,而右上角的按钮显示"OK"

want 是什么:

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

要么

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

到目前为止我找不到任何东西(例如使用target =“_ system”) . 有谁知道这些酒店和其他门户网站如何设法做到这一点,做到了吗?

5 回答

  • 1

    You cannot 使操作系统(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)

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

    但我想知道:有没有人已经 seen 这种现象 . 你有没有 Seen 在呈现CNA窗口后自动启动的safari页面?

  • 3

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

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

  • 5

    秘诀是使用仅包含单词"Success"的BODY元素向iOS客户端发送HTML响应 . 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属性将正文文本更改为白色来隐藏"Success"消息 . iOS CNA应用程序没有't seem to be looking for a page that exactly conforms to Apple'的success.html . 它似乎正在寻找包含单词"Success"的BODY元素 .

    我的用例

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

    当用户点击“同意并连接”时,表单将被POST,该表单在强制门户网站设备上执行其MAC的授权 .

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

    TL; DR:

    • 用户连接到强制网络门户

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

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

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

    • HTTP 302重定向从指向我的网络服务器上的success.html的POST URL返回,该URL包含BODY元素之后的javscript重定向 This triggers the iOS CNA web view to detect that it has successfully connected to the network

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

    • CNA webview窗口在Android中自动关闭,或者用户可以在iOS CNA webview窗口中单击“完成”关闭它

  • 2

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

    更改alogin.html页面(您的连接页面)以获得已连接的 Headers 和连接的主体,如下所示:

    <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

  • 2

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

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

    如果链接是,它不会爆发

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

    另请注意,这仅在互联网可用/单击链接时连接用户时才有效 . 在iOS CNA中,右上角按钮将在连接时变为'Done' . 所以在状态时基本上点击绝对链接CNA是 Done 将关闭CNA并将加载Safari中的链接 .

相关问题