我们的 iOS 设备(ipad、iphones 等)网络出现问题:连接到 SSID 后,iphone/ipad 立即打开强制网络助手 (CNA) - 它就像一个缩小的浏览器,没有导航按钮等 - 显示我们的欢迎页面(准备好让用户在网络中验证他的 MAC 以给他互联网)。此 CNA 是 iOS 的一项功能,会自动发生。
我在这个论坛上四处寻找如何让用户通过单击链接(在 CNA 中)打开他的 Safari 浏览器,从而使他离开 CNA 并进入 Safari(这是我希望他去的地方) ).
我搜索了诸如“如何设置链接以在 safari 中打开”之类的短语,但我得到的结果是关于人们使用 phonegap 做这样的事情......
一位用户谈到使用
window.open(myURL, '_system')
但我不知道这是否能解决我的问题。
基本上我的计划是: - 让我的欢迎页面(用户连接到我的 SSID 后显示的页面)检测用户设备的浏览器类型。我的欢迎页面托管在我 Controller 的 Walled Garden 中的一个站点上,因此每台设备都可以看到该欢迎页面(无论它们是否具有完整的互联网访问权限)。 - 如果用户有 iOS 设备,CNA 浏览器会自动打开。我的 Controller 检测到设备有 CNA 浏览器并加载一个简单的页面,其中包含消息(例如):“单击此处开始导航” - 在接下来的几秒钟内(当用户正在消化消息时),我的 Controller 为用户的 MAC 提供完全的互联网访问权限 - 当用户在 CNA 浏览器中单击该链接时,CNA 关闭然后打开 Safari,并强制 Safari 打开目标欢迎页面(我希望我的用户所在的位置,具体取决于他连接的天线)。
我真的希望一切都有意义......
我在这个论坛中找到了关于 CNA 浏览器的链接: Bypasses Apple Captive Network Assistant Login in iOS 7
但它谈到让用户从一开始就打开 Safari(禁用 CNA 功能),“希望”用户打开 Safari(而不是直接转到他的应用程序之一)。我更喜欢用户必须“单击以继续”,这会使 Safari 打开并且他会看到我的欢迎页面。
最佳答案
编辑:此解决方案在 iOS 10.3 之后不起作用。不确定这是功能还是错误: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 已完成,以便您可以让您的用户完成登录过程。为了查看登录过程是否完成以及连接是否最终建立,iOS 设备会不时发送另一个 wispr 请求。这每 40 秒发生一次,或者每当发出 HTTP 请求时(在 CNA 内导航)。
当您的服务器最终回答 Success 时对于 wispr 请求,CNA 将标记为 connected , 顶部的按钮将变为 Done .在此阶段,任何指向外部 url 的链接都将关闭 CNA 并在 Safari 中打开 :)
总而言之,您可以通过以下连接步骤实现您想要的效果:
<script>window.location.reload(true)</script>这将触发 iOS 设备立即发送另一个 wispr 请求<HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML> 回答第二个 wispr 请求, 这将触发 CNA 标记为已连接关于ios - 强制 Wifi 弹出窗口 : Click a link to open Safari,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23281552/
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我想用这两种语言中的任何一种(最好是ruby)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上
我要下载http://foobar.com/song.mp3作为song.mp3,而不是让Chrome在其native中打开它浏览器中的播放器。我怎样才能做到这一点? 最佳答案 您只需要确保发送这些header:Content-Disposition:attachment;filename=song.mp3;Content-Type:application/octet-streamContent-Transfer-Encoding:binarysend_file方法为您完成:get'/:file'do|file|file=File.
我遇到了同样的问题here对于python,但对于ruby。我需要输出这样一个小数字:0.00001,而不是1e-5。有关我的特定问题的更多信息,我正在使用f.write("Mynumber:"+small_number.to_s+"\n")输出到一个文件对于我的问题,准确性不是什么大问题,所以只做一个if语句来检查是否small_number那么更通用的方法是什么? 最佳答案 f.printf"Mynumber:%.5f\n",small_number您可以将.5(小数点右侧5位数字)替换为您喜欢的任何特定格式大小,例如,%8
我正在使用遗留数据库并需要创建一些CRUD。我如何使用scaffold生成器并告诉他表的确切名称以避免复数化过程?表格也是西类牙语。 最佳答案 您可以只使用ActiveRecord::Base.table_name=方法手动设置表名。因此,在您的模型中您可以:classOrderDetail 关于ruby-on-rails-如何在Rails脚手架生成器上强制使用单数表名?,我们在StackOverflow上找到一个类似的问题: https://stackove
假设我安装了三个gem:package-0.4.0、package-0.5.0和package-0.5.0-jbfink(我构建了-jbfink一个,因为我对0.5做了非常小的改动.0的来源,并希望将其与官方版本区分开来)。是否有gem(或其他命令)将其设为默认值?现在我已经安装了所有三个,但我的shell正在从package-0.5.0中获取可执行文件,我宁愿它默认为0.5.0-jbfink。将0.5.0-jbfink命名为0.5.1解决了这个问题,但我不想这样做,因为我不想与正式发布的0.5.1出现冲突。 最佳答案 转到conf