Как нам говорит исходный кот,
PHP код:
function browserInfo($useragent) {
foreach($this->hookObjectsArr as $hookObj) {
if (method_exists($hookObj, 'browserInfo')) {
$result = $hookObj->browserInfo($useragent);
if (strlen($result)) {
return $result;
}
}
}
$useragent = trim($useragent);
$browserInfo=Array();
$browserInfo['useragent']=$useragent;
if ($useragent) {
// browser
if (strstr($useragent,'MSIE')) {
$browserInfo['browser']='msie';
} elseif(strstr($useragent,'Konqueror')) {
$browserInfo['browser']='konqueror';
} elseif(strstr($useragent,'Opera')) {
$browserInfo['browser']='opera';
} elseif(strstr($useragent,'Lynx')) {
$browserInfo['browser']='lynx';
} elseif(strstr($useragent,'PHP')) {
$browserInfo['browser']='php';
} elseif(strstr($useragent,'AvantGo')) {
$browserInfo['browser']='avantgo';
} elseif(strstr($useragent,'WebCapture')) {
$browserInfo['browser']='acrobat';
} elseif(strstr($useragent,'IBrowse')) {
$browserInfo['browser']='ibrowse';
} elseif(strstr($useragent,'Teleport')) {
$browserInfo['browser']='teleport';
} elseif(strstr($useragent,'Mozilla')) {
$browserInfo['browser']='netscape';
} else {
$browserInfo['browser']='unknown';
}
// version
switch($browserInfo['browser']) {
case 'netscape':
$browserInfo['version'] = $this->browserInfo_version(substr($useragent,8));
if (strstr($useragent,'Netscape6')) {$browserInfo['version']=6;}
break;
case 'msie':
$tmp = strstr($useragent,'MSIE');
$browserInfo['version'] = $this->browserInfo_version(substr($tmp,4));
break;
case 'opera':
$tmp = strstr($useragent,'Opera');
$browserInfo['version'] = $this->browserInfo_version(substr($tmp,5));
break;
case 'lynx':
$tmp = strstr($useragent,'Lynx/');
$browserInfo['version'] = $this->browserInfo_version(substr($tmp,5));
break;
в нём проверка на наличие в useragent строки MSIE стоит раньше, чем Opera, и, видимо, до этого case просто не доходит выполнение кода.
Стало быть, можно написать патч и послать его в core team, а можно воспользоваться любезно предоставленным Hook и написать мааленький экстеншен, и возвращать в нём значение только для оперы.