2009-03-02 2 views
1

Недавно я просмотрел некоторую информацию об исключении кодирования для определенных браузеров вместо использования функции обнаружения ошибок. Похоже, что Джон Ресиг, создатель jQuery, является большим поклонником обнаружения признаков/ошибок (у него отличный разговор, который включает обсуждение этого вопроса на YUI Theater). Мне любопытно, если люди находят, что этот подход имеет смысл на практике? Что делать, если ошибка больше не существует в текущей версии браузера (это проблема IE6, но не 7 или 8)?Версия браузера или обнаружение ошибок

ответ

9

Наибольшая сила обнаружения объекта заключается в том, что вы используете только те объекты и функции, которые доступны вам в браузере клиента. Другими словами, учитывая следующий код:

if (document.getFoo) { 
    // always put getFoo in here 
} else { 
    // browsers who don't support getFoo go here 
} 

позволяет аккуратно отделить браузеры, не называя имен. Причина в том, что это здорово, потому что, пока браузер поддерживает getFoo, вам не нужно беспокоиться, какой из них он есть. Это означает, что вы можете фактически поддерживать браузеры, о которых вы никогда не слышали. Если вы нацеливаете строки пользовательского агента, найдите браузер, тогда вы сможете поддерживать только браузеры, которые вы знаете.

Кроме того, если браузер, который ранее не поддерживал getFoo, попадает в программу и выпускает новую версию, которая вам не нужна, вам не нужно вообще менять свой код, чтобы новый браузер мог использовать лучший код.

0

Ну, если это проблема в IE 6, но не IE 7 или IE 8, то механизм обнаружения признаков/ошибок будет отмечать это как не проблема и использовать соответствующие функции.

Имеет смысл на практике, обнюхивание браузером вызывает много проблем, что делать, если вы не обновляете свои подписи вовремя для выхода какого-либо нового браузера? Теперь вы блокируете потенциальных клиентов и посетителей, потому что считаете, что их браузер не может поддерживать то, что действительно может.

Да, это имеет смысл, и ваш второй вопрос является спорным из-за того, что он обнаруживает в первую очередь, если он больше не является ошибкой, все будет работать так, как ожидалось, без работы вокруг, которая находится в место, если ошибка была там!

1

Разбор версии и User Agent напоминает мне о стереотипировании или расовом профилировании. Обнаружение объектов - это способ, по моему мнению. Книга jQuery в действии хорошо описывает мелкие детали того, почему.

+0

интересная метафора – alex

3

Что делать, если ошибка больше не существует в текущей версии браузера (это проблема IE6, но не 7 или 8)?

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

Смежные вопросы