Определение браузера

Вы определенно должны рассмотреть возможность взглянуть на Obfuscriptor .

Я выхожу за пределы типичных трюков Javascript, которые мы видели из других инструментов, таких как YUI Compressor или Google Closure .

Обфусканный код больше похож на зашифрованный. В отличие от всего, что я видел раньше.

10
задан Serhat Ozgel 19 September 2008 в 20:27
поделиться

11 ответов

На сервере Вы в значительной степени ограничены строкой UserAgent, которую браузер обеспечивает (который чреват проблемами, имейте чтение об истории строки UserAgent).

На клиенте (т.е. в JavaScript), у Вас есть больше опций. Но наилучший вариант не состоит в том, чтобы на самом деле волноваться о разработке, какой браузер это. Просто проверьте для проверки безотносительно функции, которую Вы хотите использовать, на самом деле существует.

Например, Вы могли бы хотеть использовать setCapture, который только обеспечивает MSIE:

if (element.setCapture) element.setCapture()

Вместо того, чтобы удаваться, что браузер, и затем выведение его возможностей, мы просто видим, поддерживает ли это что-то перед использованием его - кто знает, какие браузеры будут поддерживать то, что в будущем, Вы действительно хотите должными быть возвратиться и обновить Ваши сценарии, если Safari решает поддерживать setCapture?

12
ответ дан 3 December 2019 в 20:07
поделиться

Плагин Браузера JQuery сделает это клиентский для Вас.

Что Браузер jQuery является Плагином?

Плагин Браузера jQuery является дополнением для jQuery, который помогает однозначно определить браузеры Ваших посетителей.

Что это делает?

Это дает Вам объект в JavaScript, который содержит всю информацию об используемом браузере. Это также добавляет селекторы браузера CSS, что означает, что можно разработать элементы или записать функции для определенных браузеров, версий браузера, разметок, версий расположения и даже операционных систем. Изображение Плагина Браузера jQuery в действии.

Плагин делает $.browser доступный, который можно повторно отправить серверу через вызов Ajax при реальной необходимости в нем серверная сторона.

alert($.browser.name);  // Alerts Firefox for me

Плагин только будет столь же эффективным как браузеры, он был протестирован против, как бы то ни было. Упомянутый выше плагин имеет список браузеров, распознанных в, он - тесты, но всегда существует риск, что новый браузер прибудет, выбираясь (Google Chrome..), который потребует переписывания правил распознавания. Тем не менее этот плагин, кажется, регулярно обновляется.

6
ответ дан 3 December 2019 в 20:07
поделиться

При использовании JavaScript: не используйте определение браузера

Напишите код, который тестирует себя на данные случаи, показанные браузерами, иначе Вы просто будете написанием кода для очень очень небольшого населения. Лучше для использования "typeof foo == 'undefined'" и браузер определенные приемы, где Вам нужны они.

jQuery делает это на всем протяжении своей кодовой базы (при рассмотрении кода, Вы будете видеть, что он реализует поведения для различных технологий браузера),

Лучше в конечном счете.

2
ответ дан 3 December 2019 в 20:07
поделиться

поскольку Dan сказал: это зависит от используемой технологии.

Для серверного определения браузера PHP я рекомендую Определение браузера Harald Hope:

http://techpatterns.com/downloads/php_browser_detection.php

Опубликованный под GPL.

0
ответ дан 3 December 2019 в 20:07
поделиться

Так как я просто отправил это в (теперь удаленный вопрос), и это находится все еще в моем буфере, я просто повторно отправлю.Примечание: это - серверная сторона решение PHP

Я в настоящее время использую следующий код для этого. Это - совсем не исчерпывающее решение, но должно быть легко реализовать больше браузеров. Я не знал о user-agents.org (благодарит PConroy), "на днях" я буду циклично выполняться через него и видеть, могу ли я обновить и добавить к своему списку.

define("BROWSER_OPERA","Opera");
define("BROWSER_IE","IE");
define("BROWSER_OMNIWEB","Omniweb");
define("BROWSER_KONQUEROR","Konqueror");
define("BROWSER_SAFARI","Safari");
define("BROWSER_MOZILLA","Mozilla");
define("BROWSER_OTHER","other");

$aBrowsers = array
(
  array("regexp" => "@Opera(/| )([0-9].[0-9]{1,2})@", "browser" => BROWSER_OPERA, "index" => 2),
  array("regexp" => "@MSIE ([0-9].[0-9]{1,2})@", "browser" => BROWSER_IE, "index" => 1),
  array("regexp" => "@OmniWeb/([0-9].[0-9]{1,2})@", "browser" => BROWSER_OMNIWEB, "index" => 1),
  array("regexp" => "@(Konqueror/)(.*)(;)@", "browser" => BROWSER_KONQUEROR, "index" => 2),
  array("regexp" => "@Safari/([0-9]*)@", "browser" => BROWSER_SAFARI, "index" => 1),
  array("regexp" => "@Mozilla/([0-9].[0-9]{1,2})@", "browser" => BROWSER_MOZILLA, "index" => 1)
);

foreach($aBrowsers as $aBrowser)
{
  if (preg_match($aBrowser["regexp"], $_SERVER["HTTP_USER_AGENT"], $aBrowserVersion))
  {
    define("BROWSER_AGENT",$aBrowser["browser"]);
    define("BROWSER_VERSION",$aBrowserVersion[$aBrowser["index"]]);
    break;
  }
}
1
ответ дан 3 December 2019 в 20:07
поделиться

Как утверждают многие, обнаружение в браузере может пойти очень неправильно ... однако в интересах Code Golf.

Это очень быстрый способ обнаружения IE.

<script>
  if('\v'=='v'){
    alert('I am IE');
  } else {
    alert('NOT IE');
  }
</script>

На самом деле он довольно аккуратный, потому что он выбирает IE без запуска в Opera.

Бонусные баллы, если вы знаете , почему это работает в IE. ; -)

0
ответ дан 3 December 2019 в 20:07
поделиться

Не используйте определение браузера:

  • Определение браузера не на 100% надежно в лучшие времена, но вещи ухудшаются, чем это:
  • Существует много вариантов браузеров (удовлетворение требованиям заказчика MSIE и т.д.)
  • Браузеры могут лгать о своих идентификационных данных (Opera на самом деле имеет эту встроенную функцию),
  • Шлюзы скрывают или запутывают идентификационные данные браузера
  • Удовлетворение требованиям заказчика и поставщики шлюза пишут их собственный мусор в USER_AGENT

Лучше сделать выявление признаков в клиентском сценарии. Вам, надо надеяться, только нужно определение браузера для работы вокруг ошибки в определенном браузере и версии.

0
ответ дан 3 December 2019 в 20:07
поделиться

Я первоначально задал вопрос, потому что я хочу смочь записать браузеры, и люди систем эксплуатации используют для доступа к моему сайту. Да, строке агента пользователя нельзя доверять, и да, Вы не должны использовать определение браузера для определения, какой код работать в JS, но, я хотел бы иметь максимально точный статистика.

Я сделал следующее.

Я использую комбинацию JavaScript и PHP для записи статистики. JavaScript для определения, что браузер и ОС (поскольку это является, вероятно, самым точным), и PHP для записи его:

JavaScript прибывает из Quirksmode, PHP довольно самоочевиден. Я использую платформу MooTools JS.

Добавьте следующее к сценарию BrowserDetect:

window.addEvent('domready', function() {
    if (BrowserDetect) {
        var q_data = 'ajax=true&browser=' + BrowserDetect.browser + '&version=' + BrowserDetect.version + '&os=' + BrowserDetect.OS;
        var query = 'record_browser.php'
        var req = new Request.JSON({url: query, onComplete: setSelectWithJSON, data: q_data}).post();
    }
});

Это определяет браузер, версию браузера и ОС браузера пользователя, и отправляет его в record_browser.php сценарий. record_browser.php сценарий просто add's информация, наряду с PHP session_id и ток user_id, если существующий.

MySQL Table:

CREATE TABLE `browser_detects` (
  `id` int(11) NOT NULL auto_increment,
  `session` varchar(255) NOT NULL default '',
  `user_id` int(11) NOT NULL default '0',
  `browser` varchar(255) NOT NULL default '',
  `version` varchar(255) NOT NULL default '',
  `os` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `sessionUnique` (`session`)
)

Код PHP:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $session = session_id();
    $user_id = isset($user_id) ? $user_id ? 0;
    $browser = isset($_POST['browser']) ? $_POST['browser'] ? '';
    $version = isset($_POST['version']) ? $_POST['version'] ? '';
    $os = isset($_POST['os']) ? $_POST['os'] ? '';
    $q = $conn->prepare('INSERT INTO browser_detects (`session`, `user`, `browser`, `version`, `os`) VALUES (:session :user, :browser, :version, :os)');
    $q->execute(array(
                    ':session' => $session,
                    ':user' => $user_id,
                    ':browser' => $browser,
                    ':version' => $version,
                    ':os' => $os
                ));
}
0
ответ дан 3 December 2019 в 20:07
поделиться

Для Internet Explorer и Таблиц стилей можно использовать следующий синтаксис:

<!--[if lte IE 6]><link href="/style.css" rel="stylesheet" type="text/css" /><![endif]-->

Этот applys к IE 6 или ранее. Можно изменить версию IE и также иметь:

<!--[if eq IE 7]> = Equal too IE 7
<!--[if gt IE 6]> = Greater than IE 6

Я не уверен, работает ли это с другими частями страницы, но работает при размещении в <head> тег. Посмотрите этот пример для получения дополнительной информации

-1
ответ дан 3 December 2019 в 20:07
поделиться

Обычно, когда браузер выполняет запрос, он отправляет набор информации Вам (время, дата имени, агент пользователя...). Необходимо попытаться посмотреть на заголовки отправленный клиент и перейти к тому, который говорит Вам их браузер (я думаю, что это - "Агент пользователя":.

-1
ответ дан 3 December 2019 в 20:07
поделиться

Edit: Приведенное ниже решение не рекомендуется. Попробуйте вместо этого следующее: http://whichbrowser.net/

Это однажды сработало для меня, но, глядя на код сейчас, я понятия не имею как. Вместо этого воспользуйтесь приведенным выше :-/

<script type="text/javascript">
    // <![CDATA[
    var BrowserCheck = Class.create({
        initialize: function () {
            var userAgent = navigator.userAgent.toLowerCase();
            this.version = (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1];
            this.safari = /webkit/.test(userAgent) && !/chrome/.test(userAgent);
            this.opera = /opera/.test(userAgent);
            this.msie = /msie/.test(userAgent) && !/opera/.test(userAgent);
            this.mozilla = /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent);
            this.chrome = /chrome/.test(userAgent);
        }
    });    
    // ]]>
</script>

Не забудьте, что вам нужно инициализировать его, чтобы использовать его, поэтому поместите это в ваш код:

var UserBrowser = new BrowserCheck();

А затем проверьте тип и версию браузера, как показано ниже: (например, Internet Explorer 8)

if ((UserBrowser.msie == true) && (UserBrowser.version == 8))

и т.д.

Надеюсь, это поможет вам, как и нам, но помните, что никакое обнаружение браузера не является пуленепробиваемым!

0
ответ дан 3 December 2019 в 20:07
поделиться
Другие вопросы по тегам:

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