«Тонкий» JavaScript-фреймворк для кросс-браузерного скриптинга? - PullRequest
4 голосов
/ 04 августа 2010

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

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

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

РЕДАКТИРОВАТЬ: Поскольку любой другой ответ, кажется, указывает на то, что да, jQuery - это JavaScript, и, да, большинство сред JavaScript пытаются улучшить кросс-браузерную совместимость, позвольте мнепоясните, что я имею в виду.

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

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

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

РЕДАКТИРОВАТЬ 2: Просто чтобы понять суть: я не ищу только какие-либо рамки.Я хорошо знаком с jQuery, пробовал YUI и сейчас пытаюсь попробовать Dojo.Я не просто хочу "хорошие" рамки.Я хочу тот, который соответствует моему очень конкретному описанию.Ничего страшного, если ничего подобного нет, хотя было бы интересно узнать, почему нет (то есть по техническим причинам, а не «все слишком заняты использованием jQuery»).

Ответы [ 8 ]

6 голосов
/ 04 августа 2010

Если вы настолько минималистичны в своем мышлении, как предполагает ваш пост, вы можете попробовать скомпилировать свою собственную микробиблиотеку, которая обеспечивает кросс-браузерную функциональность для некоторых наиболее часто раздражающих расхождений, таких как addEventListener против attachEvent, getTagsByClassName иотсутствие методов, прокрутка дисплеев, размеры окон и т. д. Большинство несоответствий Javascript на самом деле являются несоответствиями в методах DOM, и список, хотя и длинный, не нужно компилировать все сразу.Добавляйте свои собственные кросс-браузерные функции по мере их появления в вашем коде.

Если не считать этого, используйте jQuery.

5 голосов
/ 04 августа 2010

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

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

Прототип

MooTools

Scriptaculous

jQuery (мой личный фаворит)

4 голосов
/ 04 августа 2010

Нет шансов достичь именно того, что вы хотите.IE не предоставляет прототипы узлов DOM, поэтому у вас нет возможности расширить их, не делая это для каждого отдельного узла.Кроме того, обычно (возможно, всегда?) Невозможно перезаписать существующие доступные только для чтения свойства хост-объектов, таких как узлы 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-wrong-with-extending-the-dom/

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

Я не верю, что существует простая структура "заставьте браузеры вести себя правильно" - все они выходят далеко за рамки этого.

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

1 голос
/ 20 ноября 2014

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

1 голос
/ 20 декабря 2010

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

1 голос
/ 04 августа 2010

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

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

Итак, мое «решение» в значительной степени является решением «сделай сам».Создайте файл с именем «utilities.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.

0 голосов
/ 04 августа 2010

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

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