WebView js判断是否联网后页面自动跳转

JavaScript010

WebView js判断是否联网后页面自动跳转,第1张

本人讲解一向是不大清楚的,很可能还会让大家越看越不明白,这样的情况下就多多体谅啦。。。需求:webview和js的交互,在离线进入app时,打开显示的页面是A页面,如果这时变成在线了,那么应该自动跳转到B页面;如果本来就是在在线时打开的app,那么久会直接进入B页面,就算此时变成离线,也不会变到A页面。(假如:WebView myWebView,A页面url为AURL,B页面url为BURL)问题:js端已写有网络判断,在ios使用时是直接监听就可以,但是android端js写的判断无效,这个问题我也不明白是为什么,所以判断网络这个就落到了android手上。分析:网络判断这块内容网上有很多,也就那么几句话而已,但是怎么才能实现自动跳转呢?

两个实现方式: 一、用定时器;二、用广播判断是否联网: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16publicclassConnectNet{publicstaticbooleanisNetworkConnected(Contextcontext){// 判断是否联网ConnectivityManagercwjManager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)NetworkInfoinfo=cwjManager.getActiveNetworkInfo()if(info!=null&&info.isAvailable()){// 如果联网,返回truereturntrue}else{// 不联网,返回falsereturnfalse}}}方案一:定时器handle和Runnable的运用,就可以进行更新页面 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Handlerhandler=newHandler()// 构建Runnable对象,在runnable中更新页面Runnablerunnable=newRunnable(){@Overridepublicvoidrun(){// 更新页面// 如果联网if(ConnectNet.isNetworkConnected(context)){myWebView.loadUrl(AURL)handler.removeCallbacks(this)}else{myWebView.loadUrl(BURL)handler.postDelayed(this,2000)// 每两秒执行一次runnable}}}handler.post(runnable)缺点: 用定时器这么更新,会有一个很大的问题,就是因为是每两秒就执行一次,所以会每两秒就刷新一次页面,也就会一直在刷新,因为是loadUrl,所以屏幕就会一直闪,一直再跳动,这个问题没法解决,所以我还是选择用了广播,也是很简单的一种方法,最早朋友提示我也是用这个就好,只是自己太烂了,知道广播怎么写,却不知道怎么把该写的内容加入进去,也是突然之间想到的:方案二:广播将主程序中的myWebView设为public static,以便后面之间调用,应该有其他更好的方法的,我就不去写了

然后主程序就只需判断首次登录时的是否联网,进入哪个页面就好:1 2 3 4 5 6if(ConnectNet.isNetworkConnected(context)){myWebView.loadUrl(BURL)}else{myWebView.loadUrl(AURL)}然后就是如何写广播啦: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26publicclassNetCheckReceiverextendsBroadcastReceiver{privatestaticfinalStringTAG="NetCheckReceiver"// android 中网络变化时所发的Intent的名字publicstaticfinalStringnetACTION="android.net.conn.CONNECTIVITY_CHANGE"@OverridepublicvoidonReceive(Contextcontext,Intentintent){// TODO Auto-generated method stubif(intent.getAction().equals(netACTION)){Log.e(TAG,"ACTION:"+intent.getAction())// Intent中ConnectivityManager.EXTRA_NO_CONNECTIVITY这个关键字表示着当前是否连接上了网络// true 代表网络断开 false 代表网络没有断开booleanisBreak=intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,false)Log.e(TAG,"is break:"+isBreak)if(isBreak){Log.d(TAG,"onTeceive:NOT connected, stopping Updaterservice")}else{Log.d(TAG,"onReceive: connected, starting UpdaaterService")context.myWebView.loadUrl(BURL)}}}}好了,这样就完成了,不过一定要记得广播的话要在AndroidManifest里面进行注册:1 2 3 4 5还有判断网络的:1

如何用js或者jquery获取客户端的IP地址:

$.getJSON("http://chaxun.1616.net/ip.htm",

function (data) {

alert(data.ip)

}).error(function () { alert("获取IP失败请联网查询")})

IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。目前还有些ip代理软件,但大部分都收费。

IP地址类型

公有地址:

公有地址(Public address)由Inter NIC(Internet Network Information Center因特网信息中心)负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。

私有地址:

私有地址(Private address)属于非注册地址,专门为组织机构内部使用。

以下列出留用的内部私有地址:

A类 10.0.0.0--10.255.255.255

B类 172.16.0.0--172.31.255.255

C类 192.168.0.0--192.168.255.255

说明当前浏览器并不支持JavaScript,换用其它浏览器即可,推荐使用Chrome浏览器。

谷歌浏览器(Chrome)是一个由Google(谷歌)公司开发的开放原始码网页浏览器。该浏览器是基于其他开放原始码软件所撰写,包括WebKit和Mozilla,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。