做完一个“html嵌套到原生页面”项目后的一个整理
2015-05-21 11:14
399 查看
js与原生交互文件
base.js注意: 1.pub.agr.detaUlr这个数组必传 2.setDetaurl() 这个函数在base.js在加载的完就要执行,才能避免有时候有时出现变量不存在的原因 3.pub 公共对象定义的原因在于“减少全局变量污染”,所以在要用到公共变量的时候,可以在pub对象里面定义属性或者扩展对象 4.新建一个 likeNative.js 里面定义要接口,该文件用来模拟js调用原生方法 //注:最好解决下访问地址不同源不可以访问的问题。 5.该文件定义了项目公共的一些js函数或js调用原生函数,如果需要添加当前项目才用到的‘js函数或js调用原生函数’时,在对应位置末尾加上“/*----------扩展 2015-05-21----------*/”再开始添加。
//公共对象 var pub={}; //公共属性对象 pub.agr={}; pub.agr.dateUrl=[]; //把 [host,api_url,img_url] push传进 pub.agr.dateUrl pub.selectUrl={}; //正确的 请求 地址 //以下判断系统的主要用处是在需要针对不同系统作动作的时候要用到 pub.isAndroid=whatServer('android'); //判断是否为andorid系统, pub.isIos=whatServer('iphone'); //判断是否为ios系统, pub.agr.dateUrl[0]=['192.168.1.12222','http://192.168.1.12222/quanshitong/public/api','http://192.168.1.12222/quanshitong/public/uploadfiles/thumb/'], pub.agr.dateUrl[1]=['quanshitong.net','http://quanshitong.net/api','http://quanshitong.net/uploadfiles/thumb/']; pub.selectUrl={}; //设置当前api img 访问url setDetaurl(); $(function() { //解决android 4.4 以下 touchmove元素促发touchend事件问题 $('body').bind({ touchstart:function(e) { pub.touchState=true; }, touchmove:function(e) { pub.touchState=false; } }) }) //touch 仿hover 效果 el_class 元素对象class,hover_class 触发touchsart 的 样式class function likeHover(el_class,hover_class) { var el=$(el_class); el.live({ 'touchstart':function(e) { $(this).addClass(hover_class); }, 'touchmove':function(e) { $(this).removeClass(hover_class); }, 'touchend':function(e) { $(this).removeClass(hover_class); } }); } //判断对象是否为空 function isNullObj(obj) { var rep=false; for(key in obj) { rep=true; } return rep; } //设置数据,图片 对应请求链接 function setDetaurl() { var host=window.location.host; for(var i=0;i<pub.agr.dateUrl.length;i++) { if(host==pub.agr.dateUrl[i][0]) { pub.selectUrl.API_URL=pub.agr.dateUrl[i][1]; pub.selectUrl.IMG_URL=pub.agr.dateUrl[i][2]; } } if(isNullObj(pub.selectUrl)) { console.log('pub.selectUrl 为空!'); } else { console.log('无符合地址,请检查传入的链接是否错误!'); } } //获取url 查询字段 function getQueryStringArgs() { var qs=(window.location.search.length>0?window.location.search.substr(1):""), args={}, items=qs.length?qs.split('&'):[], item=null, name=null, value=null, i=0, len=items.length; for(i=0;i<len;i++) { item=items[i].split('='); name=decodeURIComponent(item[0]); value=decodeURIComponent(item[1]); if(name.length) { args[name]=value; } } return args; } //判断是否有传 查询字段 function hasSearch() { if(window.location.search.length>0) { return true; } else { return false; } } //判断用户手机系统类型 function whatServer(serverStr) { var userAgent=(window.navigator.userAgent).toLocaleLowerCase(), serverStr=serverStr.toLocaleLowerCase(); if(userAgent.indexOf(serverStr)) { return true; } else { return false; } } //sendCommand是为了ios写的方法; function sendCommand(arr) { var url='Interface:'; for(var i=0;i<arr.length;i++) { url+=arr[i]+':'; } url=url.substr(0,url.length-1); console.log(url); document.location.href=url; } //加载图show function show_loading() { $('.loading').show(); } //加载图 hide function hide_loading() { $('.loading').hide(); } //时间间隔插件 (function($) { $.fn.aiiTime=function(str,time_type,option) { var type=false; var clear=false; var countdown,$this; $this=$(this); try { if(time_type == true) { $this.text(countTime(str,time_type)); countdown=setInterval(function(){ if(this.clear==true) { clearInterval(countdown); } $this.text(countTime(str,time_type)); },1000); } else { $this.text(countTime(str,time_type,option)); } } catch(e) { alert('参数错误'); } } })(jQuery); function aiiTime_(str,time_type,option) { var type=false; var clear=false; var countdown,backText; try { backText=countTime(str,time_type,option); return backText; } catch(e) { alert('参数错误'); } } //字符串转换为时间 function getDate(strDate) { var date = eval('new Date(' + strDate.replace(/\d+(?=-[^-]+$)/, function (a) { return parseInt(a, 10) - 1; }).match(/\d+/g) + ')'); return date; } function countTime(str,type,option) { var data,datanow,time_dif,time_str,eval_str; var arr=new Array(), i=0; data=getDate(str); datanow=new Date(); // 秒数 如果是 datanow.getTime()-data.getTime(),这个是毫秒数 sencond_dif=parseInt((datanow.getTime()-data.getTime())/1000); if(type==false) { if(option!=undefined) { for(p in option) { arr[i]=new Array(); arr[i][0]=p; arr[i][1]=option[p][0]; arr[i][2]=option[p][1]; i++; } eval_str='if(sencond_dif<arr[0][1]){time_str=arr[0][0];}'; for(var j=1;j<arr.length;j++) { eval_str+='else if(sencond_dif<'+arr[j][1]+'){time_str=parseInt(sencond_dif/'+arr[j][2]+') +"'+arr[j][0]+'";}' } console.log(arr); console.log(arr[arr.length-1]); eval_str+='else{time_str=parseInt(sencond_dif/'+arr[arr.length-1][1]+')+"年前";}' eval(eval_str); } else { if (sencond_dif < 60) { time_str = "刚刚"; } else if (sencond_dif < 60*60) { time_str = parseInt(sencond_dif/60)+'分钟前'; } else if (sencond_dif < 60*60*24) { time_str = parseInt(sencond_dif/3600)+'小时前'; } else if (sencond_dif < 60*60*24*30) { time_str = parseInt(sencond_dif/86400)+'天前'; } else if (sencond_dif<60*60*24*30*12) { time_str = parseInt(sencond_dif/2592000)+'个月前'; } else { time_str = parseInt(sencond_dif/31536000)+'年前'; } } } else { sencond_dif=-sencond_dif; if(sencond_dif>0) { time_str=parseInt(sencond_dif/3600)>9 ? parseInt(sencond_dif/3600).toString()+":" : "0"+ parseInt(sencond_dif/3600).toString()+":"; time_str+=parseInt(sencond_dif%3600/60)>9 ? parseInt(sencond_dif%3600/60).toString()+":" : "0"+parseInt(sencond_dif%3600/60).toString()+":"; time_str+=parseInt(sencond_dif%3600%60)>9 ? parseInt(sencond_dif%3600%60).toString() :"0"+parseInt(sencond_dif%3600%60).toString(); } else { time_str="00:00:00"; clear=true; } } return time_str; } // ==============================================以下为 js 跟 ios、android 交互 常用 方法================================================================================================================================================================================================= //调用原生跳转 function jump_PrimaryView(obj,type) { var obj=JSON.stringify(obj); if(pub.touchState) return; //用户触发 touchmove 不执行方法 try { if(pub.isAndroid) { window.Js_Interactive.jump_PrimaryView(obj,type); } else if(pub.isIos) { sendCommand(['jump_PrimaryView',obj,type]); } else { console.log('系统判断有误'); } } catch(e) { console.log(e.message); } } // 调用原生 弹出提示方法 function hasAlert(str) { try { if(pub.isAndroid) { window.Js_Interactive.hasAlert(str); } else if(pub.isIos) { sendCommand(['hasAlert',encodeURI(str)]); } else { console.log('系统判断有误'); } } catch(e) { console.log(e.message); } } //将对应数据传回移动端 function getJsonString(data) { var data=JSON.stringify(data); try { if(pub.isAndroid) { window.Js_Interactive.getJsonString(data); } else if(pub.isIos) { sendCommand(['getJsonString',encodeURI(data)]); } else { console.log('系统判断有误'); } } catch(e) { console.log(e.message); } } //调用原生,跳到登录页面 function gotoLogin() { try { if(pub.isAndroid) { window.Js_Interactive.gotoLogin(); } else if(pub.isIos) { sendCommand(['gotoLogin']); } else { console.log('系统判断有误'); } } catch(e) { console.log(e.message); } } //调用 原生 图片展示 function Imageshow(ImgPath,Index) { var ImgPath=ImgPath, Index=Index; try { if(pub.isAndroid) { window.Js_Interactive.Imageshow(ImgPath,Index); } else if(pub.isIos) { sendCommand(['Imageshow',ImgPath,Index]); } else { console.log('系统判断有误'); } } catch(e) { console.log(e.message); } }
相关文章推荐
- flex手机项目嵌套html页面和html页面播放声音文件
- 如何将一个HTML页面嵌套在另一个页面中(9元包邮)
- 如何将一个HTML页面嵌套在另一个页面中
- 如何将一个HTML页面嵌套在另一个页面中
- 如何将一个HTML页面嵌套在另一个页面中
- 网站开发进阶(十)如何将一个html页面嵌套在另一个页面中
- PHP刚做完的一个商品专区异步加载和页面搜索,抽空整理mark下...
- 网站开发进阶(十)如何将一个html页面嵌套在另一个页面中
- 如何将一个HTML页面嵌套在另一个页面中
- html运用(一) 如何将一个HTML页面嵌套在另一个页面中
- 如何将一个HTML页面嵌套在另一个页面中
- js代码跟html如上,单独放在一个页面运行测试就可以,可当放到实际项目中只滚动2次就停了。原因
- 如何将一个HTML页面嵌套在另一个页面中
- 如何将一个HTML页面嵌套在另一个页面中
- 如何将一个HTML页面嵌套在另一个页面中
- 如何将一个HTML页面嵌套在另一个页面中
- 如何将一个HTML页面嵌套在另一个页面中
- 如何将一个HTML页面嵌套在另一个页面中
- 如何将一个HTML页面嵌套在另一个页面中
- j2ee的web项目,在浏览器中发起一个该项目中html页面的绝对地址,也是发起的一个http url请求,请求的响应报文的结果就是该html页面的所有html代码