目前使多说显示UA的各种方案中,最普及的应该是来自搜索客的方案:多说回复后显示浏览器及操作系统信息(Useragent)。效果如下:
这个方案十分优秀,但是使用过程中我发现它并不完美,比如除Windows以外的操作系统只能显示名称而不能显示版本,iOS会显示为Mac OS X等等…
准备工作
首先你需要按照上面链接中的文章所述操作,将embed.js本地托管并修改其中的代码。本文不再赘述。
显示操作系统版本
下面这一段代码负责操作系统的识别。
function sskos(e) {
var os = '';
if (e.match(/win/ig)) {
if (e.match(/nt 5.1/ig)) {
os = ' Windows XP'
} else if (e.match(/nt 6.1/ig)) {
os = ' Windows 7'
} else if (e.match(/nt 6.2/ig)) {
os = ' Windows 8'
} else if (e.match(/nt 6.3/ig)) {
os = ' Windows 8.1'
} else if (e.match(/nt 10.0/ig)) {
os = ' Windows 10'
} else if (e.match(/nt 6.0/ig)) {
os = ' Windows Vista'
} else if (e.match(/nt 5/ig)) {
os = ' Windows 2000'
} else {
os = ' Windows'
}
} else if (e.match(/android/ig)) {
os = ' Android'
} else if (e.match(/ubuntu/ig)) {
os = ' Ubuntu'
} else if (e.match(/linux/ig)) {
os = ' Linux'
} else if (e.match(/mac/ig)) {
os = ' Mac OS X'
} else if (e.match(/unix/ig)) {
os = ' Unix'
} else if (e.match(/symbian/ig)) {
os = ' Nokia SymbianOS'
} else {
os = ' 其它操作系统'
}
return os+"" ;
}
我们以Android为例。可以看到这里对除Windows以外的操作系统只匹配了系统的名称,而没有匹配后面的版本号。
一台Android设备的UA应该是这样的,我们需要对其中的Android版本号进行匹配和分割:
Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2307.2 Safari/537.36
将上面代码中负责识别Android的那两行改为:
} else if (r = e.match(/android\s([^\s|;]+)/ig)) {
if(e.match(/android 0.0/ig)){
os='Android 0.0'
}else {
var r1 = r[0].split(' ');
os = 'Android ' + r1[1]
}
不要在意Android 0.0那两行,那是我调试的时候用的,懒得删了。
这样就可以自动显示Android的版本了,其他的操作系统也同理。
识别iOS
与上一步原理类似,在上一步的代码后面加入:
} else if (r = e.match(/OS\s([^\s]+)/ig)) {
os = ' i'+ r[0]
搞定。虽然这样做也会有些问题,比如会显示出iOS X之类的东西….
然后你需要做的就是把改好的js重新压缩,上传到自己的服务器上,然后将多说插件中wordpress.php 中embed.js的url改为自己服务器上的地址。
当然你也可以直接使用我改好的:
压缩:https://nyan.im/res/embed.js
未压缩:https://nyan.im/res/embed-ori.js
因为时间及能力有限,修改的部分也并不完美,欢迎大家继续修正。
发表回复/Leave a Reply