Если вы используете maven, попробуйте maven обновить все проекты и заставить моментальные снимки. Он также очистит и перестроит все пути класса. Он решил мою проблему ..
Ниже класс может помочь вам: не 100% -ное решение, но вы можете пойти дальше. Лучший способ обнаружить браузер - использовать класс php, указанный ниже. В браузере браузера обнаружено, что вы можете поставить условие на тестирование в соответствии с вашими требованиями.
<?php
class Browser {
public static function detect() {
$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
if ((substr($_SERVER['HTTP_USER_AGENT'],0,6)=="Opera/") || (strpos($userAgent,'opera')) != false ){
$name = 'opera';
}
elseif ((strpos($userAgent,'chrome')) != false) {
$name = 'chrome';
}
elseif ((strpos($userAgent,'safari')) != false && (strpos($userAgent,'chrome')) == false && (strpos($userAgent,'chrome')) == false){
$name = 'safari';
}
elseif (preg_match('/msie/', $userAgent)) {
$name = 'msie';
}
elseif ((strpos($userAgent,'firefox')) != false) {
$name = 'firefox';
}
else {
$name = 'unrecognized';
}
if (preg_match('/.+(?:me|ox|it|ra|ie)[\/: ]([\d.]+)/', $userAgent, $matches) && $browser['name']=='safari' ) {
$version = $matches[1];
}
if (preg_match('/.+(?:me|ox|it|on|ra|ie)[\/: ]([\d.]+)/', $userAgent, $matches) && $browser['name']!='safari' ) {
$version = $matches[1];
}
else {
$version = 'unknown';
}
return array(
'name' => $name,
'version' => $version,
);
}
}
$browser = Browser::detect();
echo 'You browser is '.$browser['name'].' version '.$browser['version'];
echo "<br />";
?>
Если вы действительно хотите сделать это сами, существует минимум два пути:
$browser_string = $_SERVER['HTTP_USER_AGENT'];
$browser = get_browser(null, true);
Который мог бы создать нечто вроде
// contents of $browser_string
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3
//contents of $browser
Array
(
[browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$
[browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9*
[parent] => Firefox 0.9
[platform] => WinXP
[browser] => Firefox
[version] => 0.9
[majorver] => 0
[minorver] => 9
[cssversion] => 2
[frames] => 1
[iframes] => 1
[tables] => 1
[cookies] => 1
[backgroundsounds] =>
[vbscript] =>
[javascript] => 1
[javaapplets] => 1
[activexcontrols] =>
[cdf] =>
[aol] =>
[beta] => 1
[win16] =>
[crawler] =>
[stripper] =>
[wap] =>
[netclr] =>
)
Не удается обнаружить только с PHP.
Я бы подумал, что вы не любите Modernizr, это действительно потрясающе.
Если обнаружение действительно необходимо, вы должны взглянуть на http://detector.dmolsen.com .
Лучшая (и установленная) лучшая практика заключается в
a) заставить все работать с не-html5 браузерами тоже
ИЛИ
b.) просто сделать ваше приложение только для HTML5 и не предоставлять старым браузерам возможность его использовать
ИЛИ
c) использовать инструмент JS, который эмулирует (некоторые) функции HTML5 в старых браузерах : http://en.wikipedia.org/wiki/HTML5_Shiv ! Это даже используется в некоторых сайтах высокого класса, поэтому это не так уж плохо ...
PHP - это действительно неправильное место для такого обнаружения. Существует множество причин, по которым это плохая идея, и они хорошо документированы во многих местах.
Ключом к успешной работе с совместимостью браузера является обнаружение поддержки необходимых вам функций и полифония или грациозно деградировать эти особенности. Обнаружение фактической версии браузера или браузера является плохой практикой и, вероятно, даст вам проблемы как с ложными срабатываниями, так и с ложными негативами. Поскольку вся цель упражнения заключается в том, чтобы избежать сбоев в работе, наличие неточных результатов делает все это несколько самозавершающимся.
Для обнаружения функций Modernizr - отличный инструмент, но если вы действительно не получаете наряду с этим, как вы говорите в вопросе, вот крошечная небольшая функция JS, которая специально определяет поддержку типа поля ввода даты:
/**
* @returns boolean - True if browser suppors 'date' input type.
*/
function browserSupportsDateInput() {
var i = document.createElement("input");
i.setAttribute("type", "date");
return i.type !== "text";
}
Как вы можете видеть, это действительно простой материал. (Вы можете найти его более подробно здесь , кстати)
С этой функцией на вашем сайте теперь становится очень легко полировать поле даты.
Вот ваш HTML:
<input type='date' name='whatever' class='datepicker'>
Теперь у вас может быть крошечный бит jQuery, который делает следующее:
$(function() {
if(!browserSupportsDateInput()) {
$(".datepicker").datepicker();
}
});
Простой.
Конечно, Modernizr сделает это лучше. Modernizr не выполняет сам полиполк, поэтому вам нужен код, похожий на приведенный выше, чтобы применить плагин datepicker, если тип ввода даты не поддерживается, но то, что делает Modernizr, которое я не делал в моем коде выше, является чтобы вы могли сообщить браузеру только загружать библиотеку datepicker, если это необходимо. Это позволит сэкономить много полосы пропускания для современных браузеров. Modernizr делает такие вещи мертвыми легко.
Надеемся, что вышеизложенное даст вам некоторую пищу для размышлений о лучшем способе делать подобные вещи. Это все о лучшей практике. Если вы чувствуете, что вы должны делать это на PHP, то пусть будет так, но просто имейте в виду, что вы идете против рекомендации почти всех экспертов там, и это даст вам больше головных болей в длинный пробег.
if(!browserSupportsDateInput()) {
как обратное возвращение.
– Bora
25 July 2013 в 10:40