对多说显示UA方案的一些改进




目前使多说显示UA的各种方案中,最普及的应该是来自搜索客的方案:多说回复后显示浏览器及操作系统信息(Useragent)。效果如下:

pic-022

这个方案十分优秀,但是使用过程中我发现它并不完美,比如除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

因为时间及能力有限,修改的部分也并不完美,欢迎大家继续修正。




Posted

in

by

Comments

4 responses to “对多说显示UA方案的一些改进”

  1. 搜索客 Avatar

    不完美的地方是因为可供参考的信息太少了,苹果家族的UA提交的少,我自己又没有装备,所以测试机会很少,windows类andriod类的信息相对来说准确很多,因为我自己就测试了很多,同时还有很多热心用户提交帮我完善,以后还会继续更新,有什么意见和建议欢迎来告诉我~~

    1. Frank Avatar

      恩,不过还是感谢菊苣写出这么棒的方案。

  2. 不错不错,来看看。。

  3. False_Flippy Avatar

    这个不错呀!

发表回复/Leave a Reply

您的电子邮箱地址不会被公开。/Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.