Подтвердить что ты не робот

Почему JavaScript несовместим с браузерами?

Здесь кое-что, о чем я размышлял после бесчисленных часов, устанавливающих JS на совместимость с несколькими браузерами (в основном IE): Почему Javascript не совместим с браузерами?

Я имею в виду, почему JS не может быть похож на Java и Flash? Вместо этого нам приходится обращаться к фреймворкам вроде jQuery. Не поймите меня неправильно, они облегчают мою жизнь, но почему они вообще существуют?

Есть ли историческая причина для этого? Разве компании, развертывающие браузеры, просто отправляют свой собственный двигатель JS? Какая политика настолько усложняет стандартизацию?

(Примечание: я понимаю, что хорошая часть проблемы связана с DOM, но вопрос остается).

4b9b3361

Ответ 1

Основной язык основного языка Javascript соответствует (ссылка на версию ECMAScript версии 3, выпущенную в 1999 году).

Это реализации DOM, которые вызывают головные боли. Отчасти потому, что в какой-то момент не было спецификации DOM, поэтому браузеры могли делать все, что им нужно, с точки зрения составления правил для доступа и манипулирования элементами html на веб-странице.

Например:

  • window.addEventListener для поддерживающих DOM браузеров, а window.attachEvent для IE.
  • textContent для поддерживающих DOM браузеров, innerText для IE.
  • Утечка памяти для подключенных обработчиков событий в IE, поэтому вы должны вручную их разгружать.
  • getElementById является ошибкой в ​​IE и Opera, потому что он возвращает элементы по имени
  • getAttribute('href') возвращает несогласованные значения

Также существуют проблемы, связанные с поддержкой CSS браузера.

  • IE6 не поддерживает собственные PNG, поэтому вы вынуждены использовать библиотеку фильтров
  • Багги-анимация в IE, работающая с непрозрачностью фильтра

Неисправности ядра могут быть такими, как

  • Несоответствия между двигателями регулярных выражений

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

Ответ 2

Неужели компании, развертывающие браузеры, просто отправляют свой собственный двигатель JS?

Да, это, наверное, главная причина. Единого механизма JS нет; существуют различные реализации ECMAScript.

Ответ 3

Браузеры делают свою собственную реализацию простой и простой. Это та же самая причина, почему рендеринг и CSS и все, что разные в браузерах. Java/Flash/и т.д.. более универсальны, потому что они абстрагированы из браузера и доступны через какой-либо плагин. Но их фактические основные реализации отделены от браузера и контролируются одним поставщиком.

Ответ 4

Чтобы добавить к другим ответам: для этого есть историческая причина. Я могу написать это сам, но процитировать Wikipedia проще на пальцах:

JavaScript был изначально разработан Брендан Эйч из Netscape под имя Mocha, которое позже было переименовано в LiveScript и, наконец, JavaScript. LiveScript было официальным названием язык, когда он впервые был отправлен бета-версии Netscape Navigator 2.0 в сентябре 1995 года, но он был переименован в JavaScript в совместном объявления с Sun Microsystems on 4 декабря 1995 года, когда он был развернут в браузере Netscape версии 2.0B3.

[...]

JavaScript очень быстро получил широко распространенный успех как клиентский язык сценариев для веб-страниц. Как Последствия, Microsoft разработала совместимый диалект языка, назвав его JScript, чтобы избежать товарного знака вопросы. JScript добавил новые методы даты исправить не-Y2K-дружественные методы в JavaScript, основанный на java.util.Date. JScript включен в Internet Explorer 3.0, выпущенном в Август 1996 года. Диалекты воспринимается так, что термины "JavaScript" и "JScript" часто используются взаимозаменяемо. Microsoft, однако отмечает десятки способов, которыми JScript не соответствует требованиям ECMA.

В ноябре 1996 года Netscape объявила что он предоставил JavaScript для Ecma International для рассмотрения как отраслевой стандарт, и последующая работа привела к стандартизованная версия с именем ECMAScript.

Как вы можете видеть, стандартный ECMAScript был разработан позже оригинального языка. Это просто вопрос адаптации этого стандарта в текущих реализациях веб-браузеров, которые все еще продолжаются, равно как и разработка самого ECMAScript (например, см. Спецификацию ECMAScript 5, опубликованном в декабре 2009 г.).