2012-03-19 3 views
0

У нас есть старое веб-приложение, поддерживаемое в браузерах от IE6 до IE8, а javascript и css очень специфичны для IE. Теперь мы хотим поддерживать IE9. В нашем javascript есть много синтаксисов, которые не поддерживаются в IE9, например, доступ к атрибутам HTML для экземпляров элементов с использованием точки (.), а не setAttribute и getAttribute.поддержка новых браузеров организованным способом

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

Я думал, что использовать jQuery для доступа к нестандартным функциям для всех браузеров или написать класс, называемый браузером, имеет такой метод, как getAttribute, а затем другой класс, такой как IE7 и IE9, переопределяет этот метод при загрузке по-своему.

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

setAttribute и GetAttribute - это просто простые примеры, например, для доступа к ссылке на элемент мы используем document.all.elementName, которая не поддерживается в более ранних версиях firefox и т. Д. Так, как преобразовать весь этот код в JQuery или другая библиотека. больше проблем, то установить и получить атрибут, в центре внимания вопроса, что является лучшим способом для преобразования старого JavaScript в поддержку JavaScript во всех браузерах

Благодаря

+1

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

+3

Что вы пишете об использовании «setAttribute» и «getAttribute», заставляет меня думать, что у вас больше проблем, чем вы знаете, поскольку это были не всегда правильные вещи, которые нужно делать и в старых браузерах. На самом деле, хорошее множество вещей абсолютно не будет * работать *, если вы использовали эти механизмы для доступа к вещам, которые должны рассматриваться как свойства элемента DOM. – Pointy

ответ

1

Если у вас есть большое количество кода, написанного специально для IE < 9, что вы хотите работать в других браузерах, сначала вам нужно идентифицировать весь код IE, а затем заменить его на кросс-браузерный код. Я не думаю, что какая-то конкретная библиотека поможет с этим, на самом деле POJS, скорее всего, будет проще.

Например, вы можете сделать замену document.all с document.getElementById, но вы не можете сделать это с помощью $ (где $ is from jQuery или Prototype или что-то еще).

У вас будут проблемы с использованием доступа к объектам с нестандартными атрибутами, но если они будут установлены как свойства, вы будете в порядке (хотя это не рекомендуется делать в принципе).

Кстати, jQuery не «переопределяет» get/setAttribute, он имеет свои собственные методы attr и prop.

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

+0

спасибо за отзыв, мне нравится совет использовать функцию обнаружения, а не проверять браузер – daljit

2

Определенно рекомендую идти с библиотекой сглаживать браузер различий и обеспечивают множество полезных функциональных возможностей. Существует множество вариантов: jQuery, YUI, Closure, Prototype, или any of several others. jQuery - это hugely dominant at the moment, что облегчает поиск людей, знакомых с ним (и у него есть активные ресурсы для разработки, спонсорство и т. д.), но какая библиотека вы выбираете, зависит от вас.

Также настоятельно рекомендую внимательно следить за DOM2 HTML specification и часть спецификации HTML5 Web Application APIs, потому что времена, которые вы хотите использовать отраженное свойство атрибута, а не getAttribute/setAttribute. Например, element.id - это абсолютно корректный способ перекрестного браузера ссылки на идентификатор элемента; вам не нужно использовать element.getAttribute("id"). Аналогичным образом, вы хотите использовать element.className, а не element.getAttribute("class") (который работает некорректно в некоторых более ранних версиях IE). Это правда, что IE8 и ранее также добавляли другие свойства элементов для произвольных атрибутов (например, если у вас был атрибут foo для элемента, вы могли бы получить к нему доступ как element.foo, или если у вас было data-foo, вы могли бы использовать element['data-foo']), в то время как IE9 и другие браузеры не (не зря причина!), но для стандартных свойств часто отражается свойство.

Если вы используете произвольные атрибуты для элементов, также рекомендуем изменить их имена на the data-* format по спецификации HTML5.

+0

спасибо за отзыв, если я пойду с любой библиотекой, это будет jquery и спасибо за полезные ссылки. – daljit

2

IE 9 абсолютно поддерживает доступ к свойствам DOM, которые отражают атрибуты HTML, как и все основные браузеры, выпущенные за последние 15 лет, поэтому я не уверен, где вы слышали, что это не так. [Изменить: Aaaah, Я думаю, вы говорите о пользовательских атрибутах]. Эти свойства стандартизированы в спецификациях DOM, поэтому гарантируется работа в будущих браузерах. Кроме того, обычно более удобно и более совместимо использовать свойства, а не getAttribute() и setAttribute() (особенно в более старых IE, которые нарушили реализации этих методов).

Библиотеки, такие как jQuery, помогают сгладить проблемы и несовместимости с браузером, но на самом деле это не так много или проблематично, как многие считают, особенно если вы можете отказать старым версиям IE. Само существование этих библиотек создало популярный миф о том, что манипуляции с DOM в браузерах сложны и проблематичны без них. Как правило, это не так, и в наши дни проблемы лучше понятны и документированы, чем когда-либо.

+0

+1 за хороший совет. – RobG

+0

спасибо за отзыв, я согласен с тем, что библиотеки добавляют дополнительный слой и перестают понимать разработчика. – daljit

+1

@ daljit: Если разработчик позволяет использовать библиотеку, чтобы не понимать, как работают JS и DOM, это зависит от разработчика, а не от библиотеки. Я для одного не заинтересован в отладке редких странностей, скажем, в Safari, которые другие люди уже нашли и работали вокруг. И я бы * очень * использовал функции полезности, предоставляемые хорошей библиотекой, чем воссоздал ее (воссоздать, потому что практически никто не захочет печатать все эти многословные вещи снова и снова). Мои два цента. Абсолютно убедитесь, что вы знаете, что происходит на самом деле, но не выбрасывайте ребенка с водой для ванны. –

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