使用原生js 获取用户访问项目的浏览器类型
想要获取浏览器的类型很简单,网上提供了很多方法,但是看过之后,都是根据浏览器内核来判断是ie,谷歌,火狐,opeara的,
所以不能进一步判断在国内使用的主流浏览器类型,比如360,百度,搜狐浏览器等等。
接下来就写一下在vue中如何获取各种浏览器的类型
1.结构
<template>
<div class="positionInfo">
<p>用户所用系统:{{sysType}}</p>
<p>浏览器类型详情信息:{{browserType}}</p>
</div>
</template>
2.方法script
<script>
export default {
name: "twoV",
created() {
this.initPositionMsg();
this.initBrowserType();
},
data() {
return {
browserType: "",
sysType:""
};
},
methods: {
initBrowserType() {
var that = this;
var packageName = "whyun";
if (!window[packageName]) {
window[packageName] = {};
}
var MAX_360_CHROME_VERSION = ; //以360极速浏览器的最大内核版本为准
function getIOSVersion(ua) {
if (/cpu (?:iphone )?os (\d+_\d+)/.test(ua)) {
return parseFloat(RegExp.$.replace("_", "."));
} else {
return ;
}
}
function _mime(where, value, name, nameReg) {
var mimeTypes = window.navigator.mimeTypes,
i; for (i in mimeTypes) {
if (mimeTypes[i][where] == value) {
if (name !== undefined && nameReg.test(mimeTypes[i][name])) return !;
else if (name === undefined) return !;
}
}
return !;
}
var browser360 = {
result: "Chrome",
details: {
Chrome: ,
Chromium: ,
_360SE: ,
_360EE:
},
sorted: ["Chrome", "360SE", "360EE", "Chromium"],
check: function() {
var init = {
Chrome: ,
Chromium: ,
_360SE: ,
_360EE:
}; var plugins = window.navigator.plugins; var webstore = window.chrome.webstore;
var webstoreLen = Object.keys(webstore).length;
var pluginsLen = plugins.length; if (
(window.clientInformation.languages || (init._360SE += ),
/zh/i.test(navigator.language) && ((init._360SE += ), (init._360EE += )),
window.clientInformation.languages)
) {
var lanLen = window.clientInformation.languages.length;
if (lanLen >= ) {
(init.Chrome += ), (init.Chromium += );
} else if ( == lanLen) {
(init.Chrome += ), (init.Chromium += ), (init._360EE += );
} else if ( == lanLen) {
(init.Chrome += ), (init.Chromium += );
}
}
var pluginFrom,
maybe360 = ;
for (var r in plugins) {
if ((pluginFrom = /^(.+) PDF Viewer$/.exec(plugins[r].name))) {
if ("Chrome" == pluginFrom[]) {
(init.Chrome += ), (init._360SE += ), (maybe360 = );
} else if ("Chromium" == pluginFrom[]) {
(init.Chromium += ), (init._360EE += ), (maybe360 = );
}
} else if ("np-mswmp.dll" == plugins[r].filename) {
(init._360SE += ), (init._360EE += );
}
} maybe360 || (init.Chromium += );
if (webstoreLen <= ) {
init._360SE += ;
} else {
init._360SE += ;
init.Chromium += ;
if (pluginsLen >= ) {
(init._360EE += ), (init._360SE += ), (init.Chrome += );
} else if (pluginsLen < && pluginsLen > ) {
(init._360EE += ), (init._360SE += ), (init.Chrome += );
} else {
init.Chromium += ;
}
} var m = new Object();
(m.Chrome = init.Chrome),
(m.Chromium = init.Chromium),
(m["360SE"] = init._360SE),
(m["360EE"] = init._360EE);
var s = [];
for (var u in m) {
s.push([u, m[u]]);
}
s.sort(function(e, i) {
return i[] - e[];
});
this.sorted = s;
this.details = init;
this.result = s[][] || ""; return this.result.toLowerCase();
}
};
/**
* 获取 Chromium 内核浏览器类型
* @link http://www.adtchrome.com/js/help.js
* @link https://ext.chrome.360.cn/webstore
* @link https://ext.se.360.cn
* @return {String}
* 360ee 360极速浏览器
* 360se 360安全浏览器
* sougou 搜狗浏览器
* liebao 猎豹浏览器
* chrome 谷歌浏览器
* '' 无法判断
*/ function _getChromiumType(version) {
if (window.scrollMaxX !== undefined) return ""; var doc = document;
var _track = "track" in doc.createElement("track"),
appVersion = window.navigator.appVersion,
external = window.external; // 搜狗浏览器
if (external && "SEVersion" in external) return "搜狗浏览器"; // 猎豹浏览器
if (external && "LiebaoGetVersion" in external) return "猎豹浏览器"; if (/QQBrowser/.test(appVersion)) {
//qq浏览器
return "qq浏览器";
}
if (/Maxthon/.test(appVersion)) {
//遨游浏览器
return "遨游浏览器";
}
if (/TaoBrowser/.test(appVersion)) {
//淘宝浏览器
return "淘宝浏览器";
}
if (/BIDUBrowser/.test(appVersion)) {
//百度浏览器
return "baidu";
}
if (/UBrowser/.test(appVersion)) {
//UC浏览器
return "UC浏览器";
} if (window.navigator.vendor && window.navigator.vendor.indexOf("Opera") == ) {
//opera
return "欧朋浏览器";
}
// chrome
// if (window.clientInformation && window.clientInformation.languages && window.clientInformation.languages.length > 2) {
// return 'chrome';
// }
var p = navigator.platform.toLowerCase();
if (p.indexOf("mac") == || p.indexOf("linux") == ) {
return "谷歌浏览器";
}
if (parseInt(version) > MAX_360_CHROME_VERSION) {
return "谷歌浏览器";
}
// var webstoreKeysLength = window.chrome && window.chrome.webstore ? Object.keys(window.chrome.webstore).length : 0;
// if (_track) {
// // 360极速浏览器
// // 360安全浏览器
// return webstoreKeysLength > 1 ? '360ee' : '360se';
// } return browser360.check();
}
var client = (function() {
var browser = {}; var ua = navigator.userAgent.toLowerCase();
var s;
if ((s = ua.match(/rv:([\d.]+)\) like gecko/))) {
browser.name = "ie";
browser["ie"] = s[];
} else if ((s = ua.match(/msie ([\d.]+)/))) {
browser.name = "ie";
browser["ie"] = s[];
} else if ((s = ua.match(/edge\/([\d.]+)/))) {
browser.name = "edge";
browser["edge"] = s[];
} else if ((s = ua.match(/firefox\/([\d.]+)/))) {
browser.name = "firefox";
browser["firefox"] = s[];
} else if ((s = ua.match(/chrome\/([\d.]+)/))) {
browser.name = "chrome";
browser["chrome"] = s[];
var type = _getChromiumType(browser["chrome"]);
if (type) {
browser["chrome"] += "(" + type + ")";
}
} else if ((s = ua.match(/opera.([\d.]+)/))) {
browser.name = "opera";
browser["opera"] = s[];
} else if ((s = ua.match(/version\/([\d.]+).*safari/))) {
browser.name = "safari";
browser["safari"] = s[];
} else {
browser.name = "unknown";
browser["unknow"] = ;
} var system = {}; //detect platform
// var p = navigator.platform.toLowerCase();
if (ua.indexOf("iphone") > -) {
system.name = "iphone";
system.iphone = getIOSVersion(ua);
} else if (ua.indexOf("ipod") > -) {
system.name = "ipod";
system.ipod = getIOSVersion(ua);
} else if (ua.indexOf("ipad") > -) {
system.name = "ipad";
system.ipad = getIOSVersion(ua);
} else if (ua.indexOf("nokia") > -) {
system.name = "nokia";
system.nokia = true;
} else if (/android (\d+\.\d+)/.test(ua)) {
system.name = "android";
system.android = parseFloat(RegExp.$);
} else if (ua.indexOf("win") > -) {
system.name = "win"; if (/win(?:dows )?([^do]{})\s?(\d+\.\d+)?/.test(ua)) {
if (RegExp["$1"] == "nt") {
switch (RegExp["$2"]) {
case "5.0":
system.win = "";
break;
case "5.1":
system.win = "XP";
break;
case "6.0":
system.win = "Vista";
break;
case "6.1":
system.win = "";
break;
case "6.2":
system.win = "";
break;
case "6.3":
system.win = "8.1";
break;
case "10.0":
system.win = "";
break;
default:
system.win = "NT";
break;
}
} else if (RegExp["$1"] == "9x") {
system.win = "ME";
} else {
system.win = RegExp["$1"];
}
}
} else if (ua.indexOf("mac") > -) {
system.name = "mac";
} else if (ua.indexOf("linux") > -) {
system.name = "linux";
}
var str =
system.name +
(system[system.name] || "") +
"|" +
browser.name +
browser[browser.name];
var isMobile =
system.android ||
system.iphone ||
system.ios ||
system.ipad ||
system.ipod ||
system.nokia;
console.log(str,"")
that.sysType = system.name + system.win
that.browserType = str.split("|")[]
return {
browser: browser,
system: system,
isMobile: isMobile,
string: str
};
})();
window[packageName]["browser"] = client;
}
}
};
</script>
这样就获取到浏览器类型以及用户所用电脑系统信息了,我们在实际开发中,往往还要获取用户的地理位置信息,结合上一篇博客,使用微信提供的地理位置api,结合一下
就能实现获取用户的各种信息了
使用原生js 获取用户访问项目的浏览器类型的更多相关文章
- 小程序原生js获取用户权限
1.首先要有一个按钮 <view name="authorizemodal"> <view class="drawer_screen" wx: ...
- 原生JS获取各种高度宽度、浏览器窗口滚动条的位置、元素的几何尺寸名
1)关于 pageX, clienX,offsetX,layerX pageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化 clientX:鼠标在页面上可视区域的位 ...
- JS获取用户的Ip地址
在网站中通常需要获取使用者的ip地址,获取抵制的方式有很多,这里就简单介绍一下js获取用户ip地址 /*使用的新浪的ip查询api,根据返回的数据进行判断*/ <script src=" ...
- 关于Echarts的原生js获取DOM元素与动态加载DOM元素的冲突问题
1.前言: 最近在做的看板项目,因为需要循环加载后台数据,并且用Echarts做数据呈现,所以jQuery和angular等库统统靠边站,Echarts用的是原生js获取DOM元素,至于诸多不兼容等深 ...
- 原生js获取元素的样式信息
工作中经常会需要获取DOM元素的样式,之前都是通过jquery的css()方法,现在总结一下通过原生js获取元素样式的方法. obj.style js var _width = obj.style.w ...
- 原生js获取鼠标坐标方法全面讲解-zmq
原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y 一.关于js鼠标事件综合各大浏览器能获取到坐标的属性总共以下五种:eve ...
- 兼容各版本浏览器,封装原生Js获取ClassName
web前端开发工作中常常会用到获取元素的className,用jQuery的$(".class")方法也可以获取className,但是有时候牵扯到数据而影响的加载顺序的原因会获取 ...
- 原生JS获取DOM 节点到浏览器顶部的距离或者左侧的距离
关于js获取dom 节点到浏览器顶/左部的距离,Jquery里面有封装好的offset().top/offset().left,只到父级的顶/左部距离position().top/position() ...
- Nginx反向代理+Tomcat+Springmvc获取用户访问ip
Nginx+Tomcat+Springmvc获取用户访问ip 1.Nginx反向代理 修改Nginx配置文件 location / { ***********之前代码*******; proxy_se ...
随机推荐
- ActiveMQ与Spring / SpringBoot 整合(四)
1. 对 Spring 的整合 1.1 所需jar 包 <!-- activeMQ jms 的支持 --> <dependency> <groupId>org.sp ...
- NJU 操作系统实验三
实验描述: 代码实现: 链接:https://pan.baidu.com/s/1so3-XsvWBY9ZDbINob6qCw 提取码:8hhe
- Kendo UI for jQuery使用教程:支持Web浏览器
[Kendo UI for jQuery最新试用版下载] Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support ...
- git提示Please enter a commit message to explain why this merge is necessary
Please enter a commit message to explain why this merge is necessary. 请输入提交消息来解释为什么这种合并是必要的(提交信息) gi ...
- redis集群搭建_超详细
redis集群中至少应该有三个节点,以保证当集群中的某个节点挂掉,其他节点进行容错投票时,投票数能超过半票. 要保证高可用,则还需要每一个节点有一个备份机. 因此redis集群至少需要6台服务器.这里 ...
- 【shell】文本按行逆序
1.最简单的方法是使用tac [root ~]$ seq |tac 2.使用tr和awk. tr把换行符替换成自定义的分隔符,awk分解替换后的字符串,并逆序输出 [root ~]$ seq | tr ...
- 19.顺时针打印矩阵(python)
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- BZOJ 3294: [Cqoi2011]放棋子 计数 + 容斥 + 组合
比较头疼的计数题. 我们发现,放置一个棋子会使得该棋子所在的1个行和1个列都只能放同种棋子. 定义状态 $f_{i,j,k}$ 表示目前已使用了 $i$ 个行,$j$ 个列,并放置了前 $k$ 种棋子 ...
- TTTTTTTTTTTTT LA 2191 树状数组 稍修改
题意:给出n个数字,操作有修改(S)和输出区间和(M). #include <iostream> #include <cstdio> #include <cstring& ...
- R 去掉非零元素
X <- X[X!=] Malign_score <- Malign_score[Malign_score>=0.0008]