前言
一个纯 JS 的小功能,代码也十分的简单,主要是调用snackbar
功能,输出浏览器,IP,来源等一些信息,和看板娘的部分功能相同
步骤
获取浏览器版本
思路
通过获取用户的 UA,用 JS 自带的函数 MATCH 检测 UA 中所包含的特有字符,区分浏览器名称,这一块需要注意判断顺序
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| if (navigator.userAgent.match(/edg/i)) { var we_mes = "Edge"; } else if (navigator.userAgent.match(/weixin/i)) {
var we_mes = "微信"; } else if (navigator.userAgent.match(/ks/i)) { var we_mes = "快手"; } else if (navigator.userAgent.match(/weibo/i)) { var we_mes = "微博"; } else if (navigator.userAgent.match(/dy/i)) { var we_mes = "抖音"; } else if (navigator.userAgent.match(/heytapbrowser/i)) {
var we_mes = "OPPO浏览器"; } else if (navigator.userAgent.match(/vivobrowser/i)) { var we_mes = "VIVO浏览器"; } else if ( navigator.userAgent.match(/HBPC/i) || navigator.userAgent.match(/huaweibrowser/i) ) { var we_mes = "华为浏览器"; } else if ( navigator.userAgent.match(/iphone/i) && navigator.userAgent.match(/mac/i) ) { var we_mes = "苹果设备"; } else if (navigator.userAgent.match(/quark/i)) {
var we_mes = "夸克浏览器"; } else if (navigator.userAgent.match(/firefox/i)) { var we_mes = "火狐浏览器"; } else if (navigator.userAgent.match(/ucbrowser/i)) { var we_mes = "UC浏览器"; } else if (navigator.userAgent.match(/baidubox/i)) { var we_mes = "百度浏览器"; } else if (navigator.userAgent.match(/opr/i)) { var we_mes = "Opera浏览器"; } else if (navigator.userAgent.match(/qq/i)) {
var we_mes = "QQ浏览器"; } else if (navigator.userAgent.match(/chrome/i)) { var we_mes = "Chrome浏览器"; }
|
已实验部分
获取来源地址
思路
通过 referrer 识别访问来源
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| var we_link = document.referrer; if (we_link.match(/baidu/i)) { var welcome_link = "百度"; } else if (we_link.match(/sougou/i)) { var welcome_link = "搜狗"; } else if (we_link.match(/weixin/i)) { var welcome_link = "微信"; } else if (we_link.match(/qq/i)) { var welcome_link = "qq"; } else if (we_link.match(/zhihu/i)) { var welcome_link = "知乎"; } else if (we_link.match(/google/i)) { var welcome_link = "谷歌"; } else if (we_link.match(/bing/i)) { var welcome_link = "必应"; } else if (we_link.match(/so/i)) { var welcome_link = "360"; } else if (we_link.match(/weibo/i)) { var welcome_link = "微博"; } else if (we_link.match(/t.co/i)) { var welcome_link = "推特"; } else if (we_link.match(/sougou/i)) { var welcome_link = "搜狗"; } else if (we_link.match(/toutiao/i)) { var welcome_link = "今日头条"; } else { var welcome_link = "远方"; }
|
如果 referrer 为空,将会显示远方
IP 部分
api
相信 API 建立过程,请参考
为什么自建
因为用本站的 API,一秒只能请求一次,对于访客过多的时候,信息会有误差
步骤
引入 API
在主题配置文件中,在inject
加入以下代码
1
| - <script type="text/javascript" src="https://api.cnortles.top/ip/"></script>
|

代码
·
1 2 3 4 5 6 7 8 9 10 11
| /**IP部分 */ if(ip_mes["nation"] == '中国'){ var ip_mess = ip_mes["city"]; }else if(ip_mes["city"].match(/台湾/i)){ var ip_mess = "中国台湾"; } else{ var ip_mess = ip_mes["nation"]+ip_mes["province"]+ip_mes["city"]; }
|
这是我的代码逻辑,本来一开始是打算输出 国家+省份+城市+地区,但考虑了一些事情以后,决定当国家是 中国时,只输出市
弹窗显示
这里默认调用了 butterfly 主题的 snackbarShow 函数,其余可参考SnackBar
1
| btf.snackbarShow("你好啊,来自"+ip_mess+"的朋友,您使用"+we_mes+"从"+welcome_link+"赶来", !1, 3e3);}
|
效果

利用 COOKIE 只在第一次打开时显示(完整代码)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| function setCookie(name, value, hours, path) { var name = escape(name); var value = escape(value); var expires = new Date(); expires.setTime(expires.getTime() + hours * 3600000); path = path == "" ? "" : ";path=" + path; _expires = typeof hours == "string" ? "" : ";expires=" + expires.toUTCString(); document.cookie = name + "=" + value + _expires + path; }
function getCookie(name) { var arrStr = document.cookie.split("; "); for (var i = 0; i < arrStr.length; i++) { var arr = arrStr[i].split("="); if (arr[0] == name) { return decodeURIComponent(arr[1]); } } return ""; }
function welcome_mes() { if (navigator.userAgent.match(/edg/i)) { var we_mes = "Edge"; } else if (navigator.userAgent.match(/weixin/i)) { var we_mes = "微信"; } else if (navigator.userAgent.match(/ks/i)) { var we_mes = "快手"; } else if (navigator.userAgent.match(/weibo/i)) { var we_mes = "微博"; } else if (navigator.userAgent.match(/dy/i)) { var we_mes = "抖音"; } else if (navigator.userAgent.match(/heytapbrowser/i)) { var we_mes = "OPPO浏览器"; } else if (navigator.userAgent.match(/vivobrowser/i)) { var we_mes = "VIVO浏览器"; } else if ( navigator.userAgent.match(/HBPC/i) || navigator.userAgent.match(/huaweibrowser/i) ) { var we_mes = "华为浏览器"; } else if ( navigator.userAgent.match(/iphone/i) && navigator.userAgent.match(/mac/i) ) { var we_mes = "苹果设备"; } else if (navigator.userAgent.match(/quark/i)) {
var we_mes = "夸克浏览器"; } else if (navigator.userAgent.match(/firefox/i)) { var we_mes = "火狐浏览器"; } else if (navigator.userAgent.match(/ucbrowser/i)) { var we_mes = "UC浏览器"; } else if (navigator.userAgent.match(/baidubox/i)) { var we_mes = "百度浏览器"; } else if (navigator.userAgent.match(/opr/i)) { var we_mes = "Opera浏览器"; } else if (navigator.userAgent.match(/qq/i)) { var we_mes = "QQ浏览器"; } else if (navigator.userAgent.match(/chrome/i)) { var we_mes = "Chrome浏览器"; }
if (ip_mes["nation"] == "中国") { var ip_mess = ip_mes["city"]; } else if (ip_mes["city"].match(/台湾/i)) { var ip_mess = "中国台湾"; } else { var ip_mess = ip_mes["nation"] + ip_mes["province"] + ip_mes["city"]; }
var we_link = document.referrer; if (we_link.match(/baidu/i)) { var welcome_link = "百度"; } else if (we_link.match(/sougou/i)) { var welcome_link = "搜狗"; } else if (we_link.match(/weixin/i)) { var welcome_link = "微信"; } else if (we_link.match(/qq/i)) { var welcome_link = "qq"; } else if (we_link.match(/zhihu/i)) { var welcome_link = "知乎"; } else if (we_link.match(/google/i)) { var welcome_link = "谷歌"; } else if (we_link.match(/bing/i)) { var welcome_link = "必应"; } else if (we_link.match(/so/i)) { var welcome_link = "360"; } else if (we_link.match(/weibo/i)) { var welcome_link = "微博"; } else if (we_link.match(/t.co/i)) { var welcome_link = "推特"; } else if (we_link.match(/sougou/i)) { var welcome_link = "搜狗"; } else if (we_link.match(/toutiao/i)) { var welcome_link = "今日头条"; } else { var welcome_link = "远方"; } if (getCookie("welcome") == "") { btf.snackbarShow( "你好啊,来自" + ip_mess + "的朋友,您使用" + we_mes + "从" + welcome_link + "赶来", !1, 3e3 ); } setCookie("welcome", 1, "/"); } welcome_mes();
|
其他主题/网站使用方法
利用 NPM
1
| npm install node-snackbar
|
引入文件
1 2
| https://cdn.jsdelivr.net/npm/snackbar@1.1.0/dist/snackbar.min.css https://cdn.jsdelivr.net/npm/snackbar@1.1.0/dist/snackbar.min.js
|
使用
1 2 3
| Snackbar.show( {pos: 'top-center',text: "你好啊,来自"+ip_mess+"的朋友,您使用"+we_mes+"从"+welcome_link+"赶来"} );
|
TODO