首页 文章

强制无线弹出窗口:单击链接以打开Safari

提问于
浏览
24

我们在网络上遇到iOS设备问题(ipads,iphone等):连接到SSID后,iphone / ipad立即打开强制网络助手(CNA) - 它就像一个没有导航按钮等的缩小浏览器 - 显示我们的欢迎页面(准备让用户在网络中验证他的MAC以给他上网) . 这个CNA是iOS的功能,自动发生 .

我在这个论坛上四处寻找如何让用户通过点击链接(在CNA中)打开他的Safari浏览器,从而将他从CNA发送到Safari(这是我希望他的地方) .

我搜索了一些短语,例如:"How to set a link to open in safari",但我得到的结果是关于使用phonegap进行这类事情的人...
一位用户谈到使用window.open(myURL,'_system'),但我不知道这是否解决了我的问题 .

基本上我的计划是: - 让我的欢迎页面(用户连接到我的SSID后显示的页面)检测用户设备的浏览器类型 . 我的欢迎页面托管在我的控制器的Walled Garden中的一个站点,因此每个设备都可以看到欢迎页面(无论他们是否具有完全的互联网访问权限) . - 如果用户有iOS设备,则CNA浏览器会自动打开 . 我的控制器检测到设备有一个CNA浏览器,并加载一个带有消息的简单页面(如):“点击此处开始导航” - 在接下来的几秒钟内(当用户消化消息时),我的控制器给用户MAC完全互联网访问 - 当用户在CNA浏览器中点击该链接时,CNA关闭然后打开Safari,并强制Safari打开目标欢迎页面(我希望我的用户在哪里,具体取决于他所使用的天线)连接的) .

我真的希望一切都有道理......

我在这个论坛找到了关于CNA浏览器的链接:Bypasses Apple Captive Network Assistant Login in iOS 7

但它会让用户从一开始就打开Safari(禁用CNA功能),“希望”用户打开Safari(而不是直接转到他的某个应用程序) . 我更喜欢用户必须“点击继续”,这使Safari打开,他看到我的欢迎页面 .

3 回答

  • 3

    摘自Ryan的答案 How can I open an external link in Safari not the app's UIWebView?

    要将特定链接切换到Safari,只需将target =“_ system”添加到链接中,如

    <a href="http://www.domain.com/" target="_system">Link Text</a>
    

    或者要捕获javascript中包含target =“_ blank”的所有链接,请包含jQuery并使用'_system'参数将它们传递给window.open . 这适用于iOS和Android .

    $(document).on('click', 'a[target="_blank"]', function(ev) {
      var url;
    
      ev.preventDefault();
      url = $(this).attr('href');
      window.open(url, '_system');
    });
    
  • 3

    Javascript在CNA中无法完全运行,出于安全原因它被禁用 . target = "_system"是 safari 功能,而不是CNA功能 . ==>简单地说,_system在CNA中失败了 .

  • 3

    EDIT :此解决方案没有't work after iOS 10.3. Not sure if that' s功能或错误:https://forums.developer.apple.com/thread/75498

    EDIT2 :显然它在iOS 11上再次运行


    如果您可以控制强制门户网站服务器,那么有一种简单的方法可以做到这一点 .

    当连接到wifi网络时,iOS设备向一堆预定义的URL( http://www.apple.com/library/test/success.html ,...)发送GET请求,以查看是否存在Internet连接(wispr请求) . iOS设备需要答案 <HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML> . 如果请求成功,但答案不同(例如您的强制门户页面),则会触发CNA打开 .

    在这个阶段,CNA认为你没有连接,并会在顶部显示一个 Cancel 按钮 . 无论你做什么,每个链接都将在CNA内打开,而不是在Safari窗口中打开 . 完成CNA后,您可以让用户完成登录过程 . 为了查看登录过程是否完成以及最终 Build 连接,iOS设备现在将发送另一个wispr请求 . 这种情况每40秒发生一次,或者每当发出HTTP请求时(CNA内导航) .

    当您的服务器最终回复 Success 到wispr请求时,CNA将标记为 connected ,顶部的按钮将变为 Done . 在此阶段,任何外部URL链接将关闭CNA并在Safari中打开:)

    总而言之,您可以通过以下连接步骤实现您的目标:

    • 服务器使用您的CNA页面回答初始wispr请求 .

    • 页面在CNA中打开 . 在该页面中,有一些JavaScript会立即触发CNA内的导航,例如: <script>window.location.reload(true)</script> 这将触发iOS设备立即发送另一个wispr请求

    • 服务器用 <HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML> 回答第二个wispr请求,这将触发CNA标记为已连接

    • 让您的CNA页面显示指向外部网址的链接

相关问题