CI::user_agent类方法奇葩的参数设计

程序中需要判断浏览器是否为微信webview,于是考虑直接使用CI的user_agent类库方法:

$this->agent->is_browser()

根据用户代理是否是一个已知的web浏览器,返回 TRUE/FALSE (boolean)

if ($this->agent->is_browser('Safari'))
{
    echo 'You are using Safari.';
}
else if ($this->agent->is_browser())
{
    echo 'You are using a browser.';
}

Note:  The string "Safari" in this example is an array key in the list of browser definitions. You can find this list in application/config/user_agents.php if you want to add new browsers or change the stings.


在 config/user_agent.php 添加匹配字符串

$browsers = array(
    'MicroMessenger'=> 'weixin',     // waiting ADD at first
    'OPR'            => 'Opera',
    'Flock'            => 'Flock',
    'Chrome'        => 'Chrome',
    // Opera 10+ always reports Opera/9.80 and appends Version/<real version> to the user agent string
    'Opera.*?Version'    => 'Opera',
    'Opera'            => 'Opera',
    'MSIE'            => 'Internet Explorer',
    'Internet Explorer'    => 'Internet Explorer',
    'Trident.* rv'    => 'Internet Explorer',
    'Shiira'        => 'Shiira',
    'Firefox'        => 'Firefox',
    'Chimera'        => 'Chimera',
    'Phoenix'        => 'Phoenix',
    'Firebird'        => 'Firebird',
    'Camino'        => 'Camino',
    'Netscape'        => 'Netscape',
    'OmniWeb'        => 'OmniWeb',
    'Safari'        => 'Safari',
    'Mozilla'        => 'Mozilla',
    'Konqueror'        => 'Konqueror',
    'icab'            => 'iCab',
    'Lynx'            => 'Lynx',
    'Links'            => 'Links',
    'hotjava'        => 'HotJava',
    'amaya'            => 'Amaya',
    'IBrowse'        => 'IBrowse',
    'Maxthon'        => 'Maxthon',
    'Ubuntu'        => 'Ubuntu Web Browser',
);

但执行 $this->user_agent->is_brower('weixin') 却得不到预期结果

于是查看源代码

  

 public function is_browser($key = NULL)
    {
        if ( ! $this->is_browser)
        {
            return FALSE;
        }

        // No need to be specific, it's a browser
        if ($key === NULL)
        {
            return TRUE;
        }
        // Check for a specific browser
        return (isset($this->browsers[$key]) && $this->browser === $this->browsers[$key]);
    }

传入的参数原来不是分类值(比如设定的weixin)而是用于匹配正则匹配的值。我晕,如果能记住MicroMessenger之类的正则匹配字符串了还用得着多此一举加载这个类调用你这个方法来判断么,一句strpos就解决了。

再说如果要判断IE浏览器难道我还要

    'MSIE'            => 'Internet Explorer',
    'Internet Explorer'    => 'Internet Explorer',
    'Trident.* rv'    => 'Internet Explorer',

执行三次判断么?

再一看,这个类中所有判断方法都是如此设计。真不知道这程序员是怎么想的……

于是默默地在 application/libraries下面创建同名文件


转载于:https://my.oschina.net/mark35/blog/267510

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值