«Тонкий» JavaScript Framework для скриптов кросс-браузера?

StackOverflow https://stackoverflow.com/questions/3400762

Вопрос

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

В основном я хочу что-то, что делает для JavaScript, что ie7.js делает для MSIE или что html5shiv делает для элементов HTML5. Или различные обходные пути для веб-розетки или холста.

Я думаю, что jQuery и его ILK мог сделать трюк, но я предпочел что-то, что позволяет мне написать обычный, соответствующий стандартам JavaScript, как будто не было различий между браузерами.

Редактировать: Поскольку каждый другой ответ, похоже, указывает, что да, jQuery - это JavaScript и, да, большинство JavaScript Frameworks пытаются улучшить Cross-Browser, позвольте мне уточнить, что я имею в виду.

Различия между реализациями JavaScript через разные браузеры не имеют большого значения с самим языком в эти дни. Помимо нескольких встроенных методов, пропавших у старших браузеров, типы в основном ведут себя то же самое. Но есть еще различия, особенно между настоящим состоянием quo (Chrome / Firefox / Safari) и устаревшие версии MSIE (т.е. MSIE 7). На самом деле, в частности, Дом имеет тенденцию иметь менее или более тонкие особенности своим API.

Я не хочу просто рамки, которые позволяют мне написать JavaScript, который работает через большинство браузеров. Это ни копейки дюжина. Я хочу тонкий слой, который позволяет мне написать код, который работает в современных браузерах и устаревших браузерах. jQuery, dojo и т. Д. Все выходит за пределы этого и предоставлять свои собственные уникальные API, а не объединять существующие.

Говоря: «использовать jQuery», как сказать, что я должен использовать Rich Ajax Platform (или другие структуры генерации кода), если я хочу избежать различий в рендеринге кросс-браузера. Я не хочу «замена», я хочу «исправить» (не буквально).

Редактировать2: Просто чтобы водить точку домой: я не ищу только какие-либо рамки. Я глубоко знаком с jQuery, попробовал YUI и в настоящее время рассматриваю, чтобы дать додзё попробую. Я не просто хочу «хорошую» рамку. Я хочу тот, который соответствует моему очень конкретному описанию. Это нормально, если нет ничего подобного, хотя было бы интересно узнать, почему нет (т.е. технические причины, а не «все слишком заняты, используя jQuery»).

Это было полезно?

Решение

Долгое время прошел, поскольку этот вопрос был задан, но, возможно, он используется для кого-то: в последнее время группа разработчиков из Financial Times, созданная вроде универсального полифиллирования, которое только исправляет необходимые части для разных браузеров .. http://cdn.polyfill.io/v1/docs/

Другие советы

Если вы так же минималистичны в своем мышлении, как ваш пост, вы можете попробовать составить собственную микро библиотеку, которая обеспечивает функциональность кросс-браузера для некоторых наиболее часто раздражающих расхождений, таких как addeventListener против Attactevent, GetTagsbyClassname против метода, Различие прокрутки, размеры окна и т. Д. Большинство различий в JavaScript на самом деле являются неразъемностями в DOM-методах в любом случае, и в списке, в то время как длинный, не должен быть скомпилирован все сразу. Добавьте свои собственные функции кросс-браузера, поскольку они придумывают в своем кодировании.

Короче говоря, используйте jQuery.

Все библиотеки JavaScript пытаются «Уровень игрового поля», позволяя вам написать Clean Bross-браузер, совместимый код JavaScript.

Некоторые из самых популярных:

Прототип

Mootools

Писало

jquery (Мой личный любимый)

Там нет шансов достичь именно то, что вы хотите. Т.е. не подвергает прототипы узлов DOM, поэтому у вас нет способа расширить их, не делая его для каждого отдельного узла. Кроме того, это обычно (может быть всегда?) Невозможно перезаписать существующие свойства только для чтения HOST-объектов, таких как узлы DOM в IE, поэтому вы не сможете исправить неверно реализованные свойства DOM на самих узлах DOM. Даже если вы просто исправляете методы DOM, вам все равно нужно позвонить в функцию, чтобы сделать это каждый раз, когда вы получаете новую ссылку на узел:

var el = someNode.nextSibling;
fixUp(el); // Adds missing methods to the element and fixes broken ones
var matchingEls = el.getElementsByClassName("someclass");

Для действительно хорошего, подробного объяснения того, почему то, что вы хотите, невозможно, я бы порекомендовал прочитать это: http://perfectionkills.com/whats-wrog-with-withendended-dedom/

Я не верю, что есть простые «делают браузеры правильно» Framework - они все идут довольно значительную степень за пределы этого.

Тем не менее, нет никакой ценности в повторном изобретении колеса, так что может быть разумно вкладывать время в чем-то вроде jQuery (возможно, используя пользовательскую минимальную сборку) и т. Д. В то время как гарантирует, что есть разумные отблески для пользователей с помощью JavaScript.

При написании «стандартных» JavaScript я склонен определить свои собственные функции, которые обеспечивают реализацию кросс-браузера общепринятых функций. addEvent а также removeEvent (Есть несколько реализаций) являются общими примерами этой методики. Я исследовал и написал несколько функций, которые позволяют мне позвонить одну функцию для определенной проблемы, а не обнаруживать функцию и выполнять правильный код на каждом ходу.

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

Итак, мой «решение» в основном является решением DIY. Создайте файл под названием «Утилиты.js» и начните добавлять функции, которые вам нужны. addEvent, removeEvent, и кросс-браузер XMLHttpRequest хорошее место для начала. Здесь я начну тебя:

function createXHR()
{
    var xhr;
    if (window.ActiveXObject)
    {
        try
        {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e)
        {
            alert(e.message);
            xhr = null;
        }
    }
    else
    {
        xhr = new XMLHttpRequest();
    }

    return xhr;
}

Эта функция вернет объект XMLHTTPREQUEST для использования, как вы видите. Наслаждаться.

Редактировать: Обратите внимание, что этот подход может сравниться с теоретически толпой вашего пространства имен. Вы можете быть лучшим от создания utilities объект и звонок utilities.createXHR.

Если я понял тебя правильно, http://flowjs.com/ должно быть довольно близко к тому, что вы ищете. Это главная цель: «Flowjs реализует API DOM Уровень 3 во всех современных браузерах»

У вас есть это с jQuery. Использование jQuery дает вам возможность запросить дому с согласованностью, которая отсутствует в разных реализациях Browwer. Я бы сказал, что и ajax звонит на сделки с наибольшим количеством вопросов, которые люди имеют дело в JavaScript в наши дни.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top