在应用(微信/浏览器)中拉起手机QQ
在应用(微信/浏览器)中拉起手机QQ
mqqapi://forward/url?versionhttp://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(*)/);
return version ? version.split('.') : 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/
页:
[1]