Почему JavaScript несовместим во всех браузерах? - PullRequest
12 голосов
/ 06 августа 2010

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

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

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

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

Ответы [ 4 ]

16 голосов
/ 06 августа 2010

Основной язык Javascript по большей части соответствует (см. Версию 3 ECMAScript, выпущенную в 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 разработал стандарты, но у каждого поставщика браузеров есть свой способ его реализации. Нет руководящего органа, который заставлял бы продавцов полностью применять спецификацию.

7 голосов
/ 06 августа 2010

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

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

2 голосов
/ 06 августа 2010

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

JavaScript изначально был разработан Брендан Эйч из Netscape под имя мокко, которое позже было переименовано в LiveScript и, наконец, JavaScript. LiveScript был официальным названием язык, когда он впервые отправлен бета-версии Netscape Navigator 2.0 в сентябре 1995 года, но он был переименован в JavaScript в совместном объявление с Sun Microsystems о 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 г.). 1019 *

2 голосов
/ 06 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...