web与原生交互+活动

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <meta name="format-detection" content="telephone=no"> 
	<title>活动demo</title>
	<link rel="stylesheet" type="text/css" href="http://m.yinhu.com/static/app/common/reset.min.css"/>
</head>
<style type="text/css">
	.M_body{
			padding-bottom: 5rem;
		}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
	button{ 
		display: block;
		margin:0 auto;
		margin-top: 1rem;
		 5rem;
		height: 2rem;
		color: #FFFFFF;
		background-color: #53BEF7;
		border-radius:0.2rem ;
		box-shadow: 0px 3px 5px #444444;
	   }
   .M_massage{
		position: fixed;
		top: 2.3rem;
		left: 4rem;
		 8rem;
		min-height: 1.5rem;
		background-color: rgba(0,0,0,0.5);
		border-radius: 0.8rem;
		line-height: 1.5rem;
		color: #ffffff;
		text-align: center;
		font-size: 0.8rem;
	}
</style>
<body>
	<div class="M_body">
		<button id="btn1">检查登录状态</button>
		<button id="btn2">登录</button>		
		<button id="btn3">产品列表</button>
		<button id="btn4">分享</button>
		<button id="btn5">注册</button>
		<button id="btn6">友盟统计</button>
	</div>
	<div class="M_massage" id="I_massage" style="display: none;"></div>
	<script src="http://m.yinhu.com/static/app/common/flexible.16.min.js"></script>
    <script src="http://m.yinhu.com/static/app/common/activity2.0.0.min.js"></script>
	<script src="http://m.yinhu.com/static/app/common/zepto.min.js"></script>
	<script>
	/*
	 * 移动端(m站)与App的区分就是url 是否有from = app 这个参数
	 * 1.检查登录
	 * 2.登录
	 * 3.调产品列表
	 * 4.分享功能
	 * 5.注册功能
	 * 回调参数说明
	 * 参数                               值
	 * n            回调对象
	 * n.userNm     用户名
	 * n.mobileNo   手机号
	 * n.result     分享失败failure    
	 * n.result     分享成功success
	 * 
	 */
	    //1. 检查登录
		$("#btn1").tap(function(){
	    	MobilePort.App(function(){
	    		C_interaction(function(n){  // 有参数 n.userNm、n.mobileNo
				    if(n!=null){
		    		    alertMse('已经登录');
				    }else{
				    	alertMse('没有登录');
				    }
			    },"checkLogin");
	    	},"from=app");
	    });
		//2. 登录
		$("#btn2").tap(function(){
			MobilePort.App(function(){//*************app登录
    			 C_interaction(function(n){ // 有参数 n.userNm、n.mobileNo
		    		alertMse('已经登录');
		    	},"loginAction");
    		},"from=app");
    		MobilePort.noApp(function(){//*************m站的登录
    			window.location.href="https://m.yinhu.com/login/login.bl"
    		},"from=app");	
		})
		//3.产品列表
		$("#btn3").tap(function(){
			MobilePort.App(function(){//*************app产品列表
    			C_interaction(function(n){},"productListAction");	
    		},"from=app");
    		MobilePort.noApp(function(){//*************m站的产品列表
    			window.location.href='http://m.yinhu.com/loan/ydb_loan_list.bl';
    		},"from=app");	
		})
    	//4.分享功能
    	$("#btn4").tap(function(){
    		MobilePort.App(function(){//*************app分享功能
    			 C_interaction(function(n){
		    	 // 返回要分享的内容
		    	 return {
		     	        title:"活动demo",
		     	        content:"m站App",
		     	        contentURL:"http://192.168.34.250:8020/0914-sunKU/activity1.0.0.html",//内容链接
		     	        imageURL:"https://www.baidu.com/",  //图片链接
		     	        shareFrom:"1",//分享来源
		     	        shareFromCode:"1"//分享码
		            };
		    	},"shareAction",function(n){  //有参数 n.result
		    		alertMse("分享结果:"+n.result)//success 表示成功, failure 表示失败
		    	});
    		},"from=app");
    		MobilePort.noApp(function(){//*************m站的分享功能
	    		MobilePort.wxQQ(function(){ //微信或QQ
	    			alertMse('微信浏览器或QQ内置浏览器');
	    		});
		    	MobilePort.noWxQQ(function(){//非微信非QQ
		    	 	alertMse('非微信浏览器非QQ浏览器');
		    	});
    		},"from=app");
    	})
    	//5.注册
    	$("#btn5").tap(function(){
    		
    		
    		MobilePort.App(function(){//*************app的注册
    			C_interaction(function(n){ // 有参数 n.userNm、n.mobileNo
		     		alertMse("注册的回调");
		    	},"registerAction");
    		},"from=app");
    		MobilePort.noApp(function(){//*************m站的注册
	    		window.location.href="https://m.yinhu.com/regist/go_regist.bl"
    		},"from=app");
    	});
    	
    	
    	
    	$("#btn6").tap(function(){
 
 
 
    		MobilePort.App(function(){//*************		
    			C_interaction(function(n){ 
		     		return {  
        	            "title":'页面的标题', //页面的tittle
      	                "item":'事件名称',   //页面的事件名称
      	                "sourceUrl":'页面的url'		//页面的url
		     		}		     		
		    	},"dealUMAnalyics");
    		},"from=app");    		
    		MobilePort.noApp(function(){//*************m站的注册
	    		//加百度统计 或者不加
    		},"from=app");
    		
    		
    		
    		
    	});
    	
    	
    	
    	
		/**
         * 2016/12/14
         * @sunjx
         * 弹框js与交互无关
         */
	    function alertMse(n){
	    	$("#I_massage").show();
	    	$("#I_massage").html(n);
	    	setTimeout(function(){
	    		$("#I_massage").hide();
	    	},2000)
	    }
	</script>
</body>
</html>

  

/* * 2016/12/14 * yinhuweb * V 2.0.0 * */ (function(){ /* * v 1.1.0 * 使用方法: * 一、引入ua.js * 二、直接调用 MobilePort 对象的属性与方法。 * 三、目前共1个属性15个方法 * MobilePort 对象 * 属性:MobilePort.back;// 数组 内容如下 * 方法:MobilePort.androidBrowser(callBack) 1 安卓浏览器 //callBack 回调只有在安卓浏览器下执行 * 方法:MobilePort.iosBrowser(callBack) 2 ios浏览器 // 下面全部类似 * 方法:MobilePort.qqBrowser(callBack) 3 QQ浏览器 * 方法:MobilePort.ucBrowser(callBack) 4 uc浏览器 * 方法:MobilePort.wxBrowser(callBack) 5 微信浏览器 * 方法:MobilePort.pc(callBack) 6 pc浏览器 * 方法:MobilePort.move(callBack) 7 移动浏览器 * 方法:MobilePort.androidApp(callBack, parameter) 8 安卓APP * 方法:MobilePort.iosApp(callBack, parameter) 9 iosApp * 方法:MobilePort.androidWx(callBack) 10 安卓WX * 方法:MobilePort.iosWx(callBack) 11 iosWX * 2016 11 17 添加 * 方法:MobilePort.wxQQ(callBack) 12 微信浏览器 QQ内置浏览器 * 方法:MobilePort.noWxQQ(callBack) 13 非微信浏览器与QQ浏览器 * 2016 12 2 添加 * 方法:MobilePort.App(callBack, parameter) 14 App打开 * 方法:MobilePort.noApp(callBack, parameter) 15 非App打开 * 方法:MobilePort.noWxBrowser(callBack) 16 非微信浏览器 * * * * * callBack 是回调函数,在指定环境下执行的函数。 * parameter 是url上的参数,用于识别APP与Browser(必须),字符串。 * 例如 www.baidu.com?from=app parameter 指 from=app * from=app 是前后端约定好的指代 App请求的网页。 * * back数组中可能的值:内核、浏览器、移动端平台、pc端平台 、其他 * webkit Trident Presto Gecko //内核 webkit内核 Trident内核 Presto内核 Gecko内核 * IE chrome firefox opera safari //浏览器 IE浏览器 chrome浏览器 firefox浏览器 opera浏览器 safari浏览器 * UCBrowser MQQBrowser //浏览器 UC浏览器 QQ浏览器 * android ipad iphone //移动端平台 android平台 ipad平台 iphone平台 * Mac windows Linux //pc端平台 Mac平台 windows平台 Linux平台 * move wx //其他 move移动端平台 wx微信浏览器 */ /* * 正则赋值 内核 */ // webkit 内核 var webkit = /webkit/i; //IE内核 var Trident = /Trident/i; //opera内核 var Presto = /Presto/i; //火狐内核 var Gecko = /Gecko/i; /* * 正则赋值 浏览器 */ // chrome 浏览器 var chrome1 = /chrome/(d+.d+)/i; // firefox 浏览器 var firefox = /firefox/(d+.d+)/i; // opera 浏览器 var opera = /opera(/| )(d+(.d+)?)(.+?(version/(d+(.d+)?)))?/i; // safari 浏览器 var safari = /(d+.d)?(?:.d)?s+safari/?(d+.d+)?/i; // IE 浏览器 var IE = /msie (d+.d+)/i; // UC 浏览器 var UCBrowser = /UCBrowser/i; //QQ浏览器 var MQQBrowser = /MQQBrowser/i; /* * 正则赋值 pc端 */ // macintosh 系统 var Mac = /macintosh/i; // windows 平台 var windows = /windows/i; // Linux 平台 var Linux = /Linux/i; /* * 正则赋值 移动端 */ // android 系统 var android = /android/i; // ipad 系统 var ipad = /ipad/i; // iphone 系统 var iphone = /iphone/i; /* * 正则赋值 其他 */ // 移动终端 var move = /(nokia|iphone|android|ipad|motorola|^mot-|softbank|foma|docomo|kddi|up.browser|up.link|htc|dopod|blazer|netfront|helio|hosin|huawei|novarra|CoolPad|webos|techfaith|palmsource|blackberry|alcatel|amoi|ktouch|nexian|samsung|^sam-|s[cg]h|^lge|ericsson|philips|sagem|wellcom|bunjalloo|maui|symbian|smartphone|midp|wap|phone|windows ce|iemobile|^spice|^bird|^zte-|longcos|pantech|gionee|^sie-|portalmmm|jigs browser|hiptop|^ucweb|^benq|haier|^lct|operas*mobi|opera*mini|320x320|240x320|176x220)/i; // 微信打开 var wx = /MicroMessenger/i; var back = []; var ua = navigator.userAgent; /* * 2016 11 17 * 添加微信QQ浏览器 */ var T_androidQQ = new RegExp(' QQ');//安卓正则 var T_iosQQ = new RegExp(' QQ');//安卓正则 //内核判断 if (webkit.test(ua)) { //webkit back.push("webkit"); }; if (Trident.test(ua)) { //IE back.push("Trident"); }; if (Presto.test(ua)) { //欧朋 back.push("Presto"); }; if (Gecko.test(ua)) { //火狐 back.push("Gecko"); }; //浏览器 判断 if (IE.test(ua)) { back.push("IE"); }; if (chrome1.test(ua)) { back.push("chrome"); }; if (firefox.test(ua)) { back.push("firefox"); }; if (opera.test(ua)) { back.push("opera"); }; if (safari.test(ua)) { back.push("safari"); }; if (UCBrowser.test(ua)) { back.push("UCBrowser"); }; if (MQQBrowser.test(ua)) { back.push("MQQBrowser"); }; //pc 平台判断 if (Mac.test(ua)) { back.push("Mac"); }; if (windows.test(ua)) { back.push("windows"); }; if (Linux.test(ua)) { back.push("Linux"); }; //移动平台 判断 if (android.test(ua)) { back.push("android"); }; if (ipad.test(ua)) { back.push("ipad"); }; if (iphone.test(ua)) { back.push("iphone"); }; //其他 if (move.test(ua)) { back.push("move"); }; if (wx.test(ua)) { back.push("wx"); }; MobilePort = {}; //back 包含所有信息 MobilePort.back = back; //1 android 浏览器 MobilePort.androidBrowser = function (callBack) { if (android.test(ua)) { callBack(); } else { return "error"; } }; //2 ios 浏览器 MobilePort.iosBrowser = function (callBack) { if (ipad.test(ua) || iphone.test(ua)) { callBack(); } else { return "error"; } }; //3 QQ 浏览器 MobilePort.qqBrowser = function (callBack) { if (MQQBrowser.test(ua)) { callBack(); } else { return "error"; } }; //4 UC 浏览器 MobilePort.ucBrowser = function (callBack) { if (UCBrowser.test(ua)) { callBack(); } else { return "error"; } }; //5 微信打开 MobilePort.wxBrowser = function (callBack) { if (wx.test(ua)) { callBack(); } else { return "error"; } }; //6 pc 平台 MobilePort.pc = function (callBack) { if (Linux.test(ua) || windows.test(ua) || Mac.test(ua)) { callBack(); } else { return "error"; } } //7 移动平台 MobilePort.move = function (callBack) { if (move.test(ua)) { callBack(); } else { return "error"; } } //8 androidApp MobilePort.androidApp = function (callBack, parameter) { var oUrl = location.search; var tc = new RegExp(parameter); if (android.test(ua) && tc.test(oUrl)) { callBack(); } else { return "error"; } }; //9 iosApp MobilePort.iosApp = function (callBack,parameter) { var oUrl = location.search; var tc = new RegExp(parameter); if ((ipad.test(ua) || iphone.test(ua)) && tc.test(oUrl)) { callBack(); } else { return "error"; } }; //10 androidWx MobilePort.androidWx = function (callBack) { if (android.test(ua)&&wx.test(ua)) { callBack(); } else { return "error"; } }; //11 iosWx MobilePort.iosWx = function (callBack) { if ((ipad.test(ua)||iphone.test(ua))&&wx.test(ua)) { callBack(); } else { return "error"; } }; //12 微信浏览器 QQ内置浏览器 MobilePort.wxQQ = function(callBack){ if(T_androidQQ.test(ua)||T_iosQQ.test(ua)||wx.test(ua)){ callBack(); }else{ return "error"; } }; //13 非微信浏览器与QQ浏览器 MobilePort.noWxQQ = function(callBack){ if(T_androidQQ.test(ua)||T_iosQQ.test(ua)||wx.test(ua)){ return "error"; } else{ callBack(); } } //14 App MobilePort.App = function(callBack,parameter){ var oUrl = location.search; var tc = new RegExp(parameter); if(tc.test(oUrl)){ callBack(); } else{ return "error"; } } //15 非App MobilePort.noApp = function(callBack,parameter){ var oUrl = location.search; var tc = new RegExp(parameter); if(tc.test(oUrl)){ return "error"; } else{ callBack(); } } //16 非微信浏览器 MobilePort.noWxBrowser = function(callBack,parameter){ if (wx.test(ua)) { return "error"; } else { callBack(); } } })(); // /* * 适合版本为 2.2.0 * 前提是url上加 from=app * 2016 11 18 */ var Native = {}; var ua = navigator.userAgent; var oUrl = location.search; var tc = /from=app/i; //原生H5交互 function C_interaction(a,b,c){ if(tc.test(oUrl)){ //1.checkLogin js调native 判断登录 有回调 有参数 if(b=="checkLogin"){ Native.checkLogin = function(n){ a(n); }; var parameter = '{"obj":"Native","funcName":"checkLogin"}'; yinhu.checkLogin(parameter); } //2.loginAction js调native 调用登录 有回调 有参数 else if(b=="loginAction"){ Native.loginAction =function(n){ a(n); }; var parameter = '{"obj":"Native","funcName":"loginAction"}'; yinhu.loginAction(parameter); } //3.productListAction js调native 产品列表 无回调 无参数 else if(b=="productListAction"){ yinhu.productListAction(); } //4.dialService js调native 拨打客服 无回调 有参数 else if(b=="dialService"){ var C_phone = a(); yinhu.dialService(C_phone) } //5.checkAppVersion js调native 版本号 有回调 有参数 else if(b=="checkAppVersion"){ Native.checkAppVersion = function(n){ a(n); }; var parameter = '{"obj":"Native","funcName":"checkAppVersion"}'; yinhu.checkAppVersion(parameter); } //待优化部分 //6.registerAction js调native 注册 无回调 有参数 else if(b=="registerAction"){ Native.registerAction = function(n){ a(n); }; var parameter = '{"obj":"Native","funcName":"registerAction"}'; yinhu.registerAction(parameter); } //7.js调native 分享功能 无回调 有参数 else if(b=="shareAction"){ var a = a(); Native.shareResult=function(n){ c(n); }; var C_code = { "title":a.title, "content":a.content, "contentURL":a.contentURL, "imageURL":a.imageURL, "shareFrom":a.shareFrom, "shareFromCode":a.shareFromCode, "obj":"Native", "funcName":"shareResult" }; var C_code = JSON.stringify(C_code); yinhu.shareAction(C_code); } //8.js调 native统计 else if(b == "dealUMAnalyics"){ var a = a(); var C_code = { "title":a.title, "item":a.item, "sourceUrl":a.sourceUrl }; var C_code = JSON.stringify(C_code); yinhu.dealUMAnalyics(C_code); } //9 js调native风险评估 else if(b == "submitAssess"){ var C_code = a(); yinhu.submitAssess(C_code); } else{ console.log("参数错误") } }else { console.log("url没有from=app") } }; /** * 自动加版本号 * 2017/1/19 */ var C_version = (new Date).getTime() var C_tc_version = /version/i; var C_tc_parameter = /?/i; var C_currentUrl = window.location.href; if(C_tc_version.test(C_currentUrl)){ }else{ if(C_tc_parameter.test(C_currentUrl)){ window.location.href = C_currentUrl+'&version='+C_version; }else{ window.location.href = C_currentUrl+'?version='+C_version; } }

  

原文地址:https://www.cnblogs.com/sunjingxin/p/6343527.html