在应用(微信/浏览器)中拉起手机QQ
- mqqapi://forward/url?version
复制代码- http://41e664-0.gz.1253619672.clb.myqcloud.com/url/wuyihb.html?_wv=3&t=1493478113833&
复制代码场景是:当我们做一些活动用来拉新等等时,通常会限制用户只在手Q中打开。比如用户通过微信扫码到了我们H5活动页面。那么我们就可以通过伪协议将手Q拉起,并且将H5页面打开。用户到达的途径有很多,比如通过浏览器,通过微信,通过其他APP应用。 正解代码先不看原理的话,代码应该是像下面的。今天我也参照了许多别人的代码,但大多数不是这个不兼容,就是微信拉不起来。或者是 IOS 拉起正常,但是 Android 就是不行。这通常是由于代码没有完备造成的。更主要是因为我们的浏览器什么的都在时时更新。 - /**
- * 检测浏览器UA
- * @type {Function}
- */
- var condition = (function() {
- var ua = navigator.userAgent,
- chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/);
- //利用正则获得匹配 安卓 UA
- var getAndroidVersion = function() {
- var ua = navigator.userAgent.toLowerCase(),
- version = ua.match(/android\s([0-9\.]*)/);
- return version ? version[1].split('.')[0] : false;
- };
- return {
- chrome: chrome, //true or false
- androidVersion: getAndroidVersion() //version
- }
- });
- /**
- * 获得伪协议
- * @param jumpURL
- * @returns {string}
- */
- function getURL( normal ) {
- if(normal) {
- return 'mqqapi://forward/url?src_type=internal&version=1&url_prefix='+ btoa(location.href);
- }
- return "intent://forward/url?src_type=web&style=default&=1&version=1&url_prefix=" + btoa(location.href) + "#Intent;scheme=mqqapi;package=com.tencent.mobileqq;end";
- }
- /**
- * 检测是否安装了QQ,如果没有安装要引导用户安装
- */
- var checkIfInstallQQ = function() {
- WeixinJSBridge.invoke("getInstallState", {
- "packageUrl": "mqq://", //ios
- "packageName": "com.tencent.mobileqq" //android
- }, function(res) {
- if(/^get_install_state:yes/.test(res.err_msg)) {
- window.open( getURL( true ), '_self' );
- window.setTimeout(function() {
- WeixinJSBridge.invoke("closeWindow");
- }, 1500);
- } else if(/^get_install_state:no$/.test(res.err_msg)) {
- if(confirm('您还没有安装手Q,现在去下载安装?')) {
- window.location.replace('http://im.qq.com/mobileqq/touch/index.html');
- }
- } else {
- Alert.show({
- showCancel:false,
- msg: "err:" + res.err_msg
- });
- }
- });
- };
- /**
- * 判断是否在手q中打开,如果不是,则判断是否在微信打开
- * 如果在微信打开,调用微信的 JSBridge
- */
- if( !U.ua.QQ ){
- Alert.show({
- showCancel:false,
- msg: "请在手q中打开此页面",
- onConfirm : function () {
- //如果在微信中打开
- if(U.ua.weixin) {
- if (typeof WeixinJSBridge == "object" && typeof WeixinJSBridge.invoke == "function") {
- checkIfInstallQQ();
- } else {
- if (document.addEventListener) {
- document.addEventListener("WeixinJSBridgeReady", checkIfInstallQQ, false);
- } else if (document.attachEvent) {
- document.attachEvent("WeixinJSBridgeReady", checkIfInstallQQ);
- document.attachEvent("onWeixinJSBridgeReady", checkIfInstallQQ);
- }
- }
- }else{
- //这里也可以判断下是否安装了手Q
- if(U.ua.android && condition.chrome && condition.androidVersion() >= 5) {
- window.open( getURL(false) );
- }else{
- window.open( getURL(true) );
- }
- }
- }
- });
- return;
- }
复制代码- 原始地址:http://cailidan.cn/2016/10/16/%E5%9C%A8%E5%BA%94%E7%94%A8-%E5%BE%AE%E4%BF%A1-%E6%B5%8F%E8%A7%88%E5%99%A8-%E4%B8%AD%E6%8B%89%E8%B5%B7%E6%89%8B%E6%9C%BAQQ/
复制代码
|