最近产品提了一个需求,项目上有一个很low的QQ客服,要求用户点击客服时能判断用户是否已经安装QQ应用,根据网上各路大神的代码总结了一下在IE和360浏览器下的靠谱方案,chrome,firefox需要插件配合目前无法有效解决
IE内核可以判断ActiveXObject对象存在时,去new window.ActiveXObject("TimwpDll.TimwpCheck"),用try catch包裹,如果没有安装QQ,会走catch
360浏览器,首先要判断是谷歌内核,然后navigator.mimeTypes属性有一个特定值"application/vnd.chromium.remoting-viewer")只在360浏览器有,检测出360浏览器之后,遍历navigator.plugins对象,取item的name属性值等于"Tencent QQ"
检测其他应用同理
下面贴出代码,由于只能检测IE 360 ,其他浏览器一律忽略返回true
function checkQQInstall(){
if("ActiveXObject" in window){
try{//IE判断是否安装QQ
new window.ActiveXObject("TimwpDll.TimwpCheck");
console.log("QQ已安装!")
return true
}catch (e) {
console.warn("没有可支持的插件!");
return false ;
}
}
let isChrome= window.navigator.userAgent.toLowerCase().indexOf("chrome")>0;
if(!isChrome) return true;
// 360
function findPlugins(){
var res=false;
var plugins = navigator.plugins;
for (var i = 0; i <plugins.length; i++) {
var plugin_name=plugins[i].name;
// console.log(plugin_name);
if (plugin_name=="Tencent QQ") {
// alert(plugin_name+" 已找到");
res=true;
break;
}
}
return res ;
}
function _mime(option, value) {
var mimeTypes = navigator.mimeTypes;
for (var mt in mimeTypes) {
if (mimeTypes[mt][option] == value) {
return true;
}
}
return false;
}
var is360 = _mime("type", "application/vnd.chromium.remoting-viewer");
if(isChrome&&is360){
console.log("检测到是360浏览器");
if( findPlugins()) {
console.log('QQ已安装!')
return true
}else{
console.warn('请安装QQ!')
return false
}
}
//既不是IE也不是360也返回true
return true
}