Modernizr - условный оператор PHP, основанный на классе HTML? [Дубликат]

Если вы используете maven, попробуйте maven обновить все проекты и заставить моментальные снимки. Он также очистит и перестроит все пути класса. Он решил мою проблему ..

4
задан SQB 24 September 2015 в 10:03
поделиться

6 ответов

Ниже класс может помочь вам: не 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 />";
        ?> 
0
ответ дан Butani Vijay 23 August 2018 в 00:50
поделиться

Если вы действительно хотите сделать это сами, существует минимум два пути:

$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] =>

)

0
ответ дан insanebits 23 August 2018 в 00:50
поделиться

Не удается обнаружить только с PHP.

Я бы подумал, что вы не любите Modernizr, это действительно потрясающе.

0
ответ дан JohnnyFaldo 23 August 2018 в 00:50
поделиться

Если обнаружение действительно необходимо, вы должны взглянуть на http://detector.dmolsen.com .

2
ответ дан Remko 23 August 2018 в 00:50
поделиться
  • 1
    Это отличная библиотека! Но я отказался от детектора загрузки, у которого есть 77 файлов и 380 КБ. – Bora 25 July 2013 в 10:02
  • 2
    Да, это, наверное, слишком много. Как предложил ДжонниФалдо придерживаться модернизма. Он будет решать проблемы, с которыми вы столкнулись, не будучи «лишним». – Remko 25 July 2013 в 10:16

Лучшая (и установленная) лучшая практика заключается в

a) заставить все работать с не-html5 браузерами тоже

ИЛИ

b.) просто сделать ваше приложение только для HTML5 и не предоставлять старым браузерам возможность его использовать

ИЛИ

c) использовать инструмент JS, который эмулирует (некоторые) функции HTML5 в старых браузерах : http://en.wikipedia.org/wiki/HTML5_Shiv ! Это даже используется в некоторых сайтах высокого класса, поэтому это не так уж плохо ...

5
ответ дан Sliq 23 August 2018 в 00:50
поделиться
  • 1
    Я предполагаю, отмечен A;) Материя, что пользователи делают они = D Спасибо, полезный ответ. – Bora 25 July 2013 в 10:05

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, то пусть будет так, но просто имейте в виду, что вы идете против рекомендации почти всех экспертов там, и это даст вам больше головных болей в длинный пробег.

9
ответ дан Spudley 23 August 2018 в 00:50
поделиться
  • 1
    Очень полезно! И должно быть if(!browserSupportsDateInput()) { как обратное возвращение. – Bora 25 July 2013 в 10:40
  • 2
    @Bora - да, упс. исправлено это. :-) благодаря. Рад, что вы сочли это полезным. – Spudley 25 July 2013 в 10:48
Другие вопросы по тегам:

Похожие вопросы: