Вы определенно должны рассмотреть возможность взглянуть на Obfuscriptor .
Я выхожу за пределы типичных трюков Javascript, которые мы видели из других инструментов, таких как YUI Compressor или Google Closure .
Обфусканный код больше похож на зашифрованный. В отличие от всего, что я видел раньше.
На сервере Вы в значительной степени ограничены строкой UserAgent, которую браузер обеспечивает (который чреват проблемами, имейте чтение об истории строки UserAgent).
На клиенте (т.е. в JavaScript), у Вас есть больше опций. Но наилучший вариант не состоит в том, чтобы на самом деле волноваться о разработке, какой браузер это. Просто проверьте для проверки безотносительно функции, которую Вы хотите использовать, на самом деле существует.
Например, Вы могли бы хотеть использовать setCapture, который только обеспечивает MSIE:
if (element.setCapture) element.setCapture()
Вместо того, чтобы удаваться, что браузер, и затем выведение его возможностей, мы просто видим, поддерживает ли это что-то перед использованием его - кто знает, какие браузеры будут поддерживать то, что в будущем, Вы действительно хотите должными быть возвратиться и обновить Ваши сценарии, если Safari решает поддерживать setCapture?
Плагин Браузера JQuery сделает это клиентский для Вас.
Что Браузер jQuery является Плагином?
Плагин Браузера jQuery является дополнением для jQuery, который помогает однозначно определить браузеры Ваших посетителей.
Что это делает?
Это дает Вам объект в JavaScript, который содержит всю информацию об используемом браузере. Это также добавляет селекторы браузера CSS, что означает, что можно разработать элементы или записать функции для определенных браузеров, версий браузера, разметок, версий расположения и даже операционных систем. Изображение Плагина Браузера jQuery в действии.
Плагин делает $.browser
доступный, который можно повторно отправить серверу через вызов Ajax при реальной необходимости в нем серверная сторона.
alert($.browser.name); // Alerts Firefox for me
Плагин только будет столь же эффективным как браузеры, он был протестирован против, как бы то ни было. Упомянутый выше плагин имеет список браузеров, распознанных в, он - тесты, но всегда существует риск, что новый браузер прибудет, выбираясь (Google Chrome..), который потребует переписывания правил распознавания. Тем не менее этот плагин, кажется, регулярно обновляется.
При использовании JavaScript: не используйте определение браузера
Напишите код, который тестирует себя на данные случаи, показанные браузерами, иначе Вы просто будете написанием кода для очень очень небольшого населения. Лучше для использования "typeof foo == 'undefined'"
и браузер определенные приемы, где Вам нужны они.
jQuery делает это на всем протяжении своей кодовой базы (при рассмотрении кода, Вы будете видеть, что он реализует поведения для различных технологий браузера),
Лучше в конечном счете.
поскольку Dan сказал: это зависит от используемой технологии.
Для серверного определения браузера PHP я рекомендую Определение браузера Harald Hope:
http://techpatterns.com/downloads/php_browser_detection.php
Опубликованный под GPL.
Так как я просто отправил это в (теперь удаленный вопрос), и это находится все еще в моем буфере, я просто повторно отправлю.Примечание: это - серверная сторона решение 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;
}
}
Как утверждают многие, обнаружение в браузере может пойти очень неправильно ... однако в интересах Code Golf.
Это очень быстрый способ обнаружения IE.
<script>
if('\v'=='v'){
alert('I am IE');
} else {
alert('NOT IE');
}
</script>
На самом деле он довольно аккуратный, потому что он выбирает IE без запуска в Opera.
Бонусные баллы, если вы знаете , почему это работает в IE. ; -)
Не используйте определение браузера:
Лучше сделать выявление признаков в клиентском сценарии. Вам, надо надеяться, только нужно определение браузера для работы вокруг ошибки в определенном браузере и версии.
Я первоначально задал вопрос, потому что я хочу смочь записать браузеры, и люди систем эксплуатации используют для доступа к моему сайту. Да, строке агента пользователя нельзя доверять, и да, Вы не должны использовать определение браузера для определения, какой код работать в 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
));
}
Для 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>
тег. Посмотрите этот пример для получения дополнительной информации
Обычно, когда браузер выполняет запрос, он отправляет набор информации Вам (время, дата имени, агент пользователя...). Необходимо попытаться посмотреть на заголовки отправленный клиент и перейти к тому, который говорит Вам их браузер (я думаю, что это - "Агент пользователя":.
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))
и т.д.
Надеюсь, это поможет вам, как и нам, но помните, что никакое обнаружение браузера не является пуленепробиваемым!