程序中需要判断浏览器是否为微信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下面创建同名文件