需求背景:需要判断网页是否在自己app里的webView里打开(电脑端浏览器、手机qq,手机请求浏览器,微信,微信朋友圈,微博,手机Safari等除外)
1.app内部:需要调用原生app方法
2.非微信的其他浏览器或webview,提示请在微信中打开页面
3.微信:发起微信授权获取的用户信息。
function openInWebview () {
var ua = navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == 'micromessenger') { // 微信浏览器判断
return false;
} else if (ua.match(/QQ/i) == 'qq') { // QQ浏览器判断
return false;
} else if (ua.match(/WeiBo/i) == "weibo") {
return false;
} else {
if (ua.match(/Android/i) != null) {
return ua.match(/browser/i) == null;
} else if (ua.match(/iPhone/i) != null) {
return ua.match(/safari/i) == null;
} else {
return (ua.match(/macintosh/i) == null && ua.match(/windows/i) == null);
}
}
}
使用方式
if(openInWebview()){
//在app内打开
//to do something
//例如
window.android.showToast();
}else{
// 其他地方
// 发起微信授权
// 网页链接
例如:
window.location.href = window.routerList.loginByEduUser;
}
备注:此判断在电脑端,使用手机模式预览,且选择安卓手机机型的时候,判断会有问题(会判断为是在app内打开)。但是在真机上是好的。