Можно ли написать библиотеку JavaScript, которая бы соответствовала всем стандартам браузеров? - PullRequest
5 голосов
/ 03 октября 2009

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

Например, IE6 не распознает псевдокласс :hover в CSS для чего-либо, кроме ссылок, но существует файл JavaScript, который находит все ссылки на :hover и применяет хак, который заставляет IE6 делать это правильно, позволяя мне использовать команду hover, как я должен.

Существует невероятное количество времени (и, следовательно, денег), которое каждый веб-мастер должен потратить на изучение всех этих хаков. Представьте, что существует проект с открытым исходным кодом, в котором все, что нужно сделать, это добавить одну строку в заголовок, в который встроен код, и тогда они смогут свободно кодировать свой сайт в соответствии с принятыми веб-стандартами (XHTML Strict, CSS3).

Кроме того, это послужило бы стимулом для веб-браузеров следовать стандартам или зависеть от более медленного браузера из-за выполнения всего кода JavaScript.

Итак, возможно ли это?

Ответы [ 7 ]

4 голосов
/ 03 октября 2009

Кроме того, это послужило бы стимулом для веб-браузеров следовать стандартам или зависеть от более медленного браузера из-за выполнения всего кода JavaScript.

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

Нет бесплатного обеда.

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

Не ожидайте, что это будет слишком легко. Если бы все было так просто, вам бы за это не заплатили ...; -)

3 голосов
/ 03 октября 2009

Проверьте jQuery он хорошо справляется со стандартизацией браузера javascript

В том же духе explorercanvas обеспечивает поддержку тега HTML5 canvas для браузеров IE.

1 голос
/ 03 октября 2009

Как коллекция всех известных взломы JavaScript, которые заставляют каждого браузер, чтобы правильно интерпретировать код

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

Если вы хотите абстракцию коррекции JavaScript, вы можете использовать jQuery.

Если вы хотите абстракцию коррекции CSS, вы можете проверить / IE7 / .

Я обычно не люблю использовать css-исправления, сделанные в javascript. Это еще одна сложность моего кода, еще одна библиотека, которая может вставлять ошибки в уже исправленные браузеры. Я предпочитаю создавать условных операторов вместо ie6, ie7 и т. Д. И создавать отдельные таблицы стилей для каждого из них. Этот подход работает и не создает много накладных расходов.

РЕДАКТИРОВАТЬ: (Я знаю, что у нас есть проблемы в других браузерах, но, поскольку IE является основным браузером, и обычно нам нужны действительно странные хаки, чтобы заставить его работать, условные операторы CSS - хороший подход IMO).

1 голос
/ 03 октября 2009

Для IE есть библиотека, которая делает его более похожим на совместимый со стандартами браузер: IE7 .

Дина Эдвардса
1 голос
/ 03 октября 2009

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

0 голосов
/ 04 октября 2009

До JavaScript 1.4 не было глобальных аргументов Array, и невозможно реализовать массив аргументов самостоятельно без высокоразвитого исходного фильтра. Это означает, что для языка будет невозможно поддерживать обратную совместимость с Netscape 4.0 и Internet Explorer 4.0. Итак, сразу могу сказать, что нет , вы не можете сделать все совместимыми со стандартами браузера.

Post-netscape, вы можете реализовать почти все функции в ядре языка в самом JavaScript. Например, я закодировал все методы объекта Array в коде JavaScript на 100%.

http://openjsan.org/doc/j/jh/jhuni/StandardLibrary/1.81/index.html

Вы можете увидеть мою реализацию Array здесь, если перейти по ссылке, а затем перейти к Array и затем «source».


То, на что, вероятно, ссылается большинство из вас, - это реализация объектов DOM самостоятельно, что гораздо более проблематично. Используя VML, вы можете реализовать тег Canvas во всех современных браузерах, однако в Internet Explorer вы получите ошибочную / едва работающую производительность, поскольку VML - это разметка, которая не подходит для реализации тега Canvas ...

http://code.google.com/p/explorercanvas/

Flash / Silverlight: С помощью любого из них вы можете реализовать тег Canvas, и он будет работать достаточно хорошо, вы также можете реализовать звук. Однако, если у пользователя нет плагинов для браузера, вы ничего не можете сделать.

http://www.schillmania.com/projects/soundmanager2/

Абстракции DOM: Что касается DOM, вы можете абстрагироваться от DOM, реализовав свой собственный объект Event, такой как в случае QEvent, или даже реализовав свой собственный объект Node, как в Однако в случае с YAHOO.util.Element они обычно имеют некоторые незначительные изменения в стандартном API, поэтому люди обычно просто абстрагируются от стандарта, и существуют сотни случаев абстрагирования библиотек.

http://code.google.com/p/qevent/

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

http://dean.edwards.name/weblog/2007/03/yet-another/

0 голосов
/ 03 октября 2009

На самом деле вы можете, есть много библиотек для решения этой проблемы. С самого начала проблема соблюдения javascript всегда была проблемой для разработчиков, и благодаря инновационным разработчикам библиотек, чтобы решить эту проблему ...

Один из них и мой любимый - JQuery.

...