Действительно ли возможно записать библиотеку JavaScript, которая делает все стандарты браузеров совместимыми?

Можно выполнить это тремя способами:

  1. Надлежащий подкласс (конечно)
  2. пользовательский метод, который Вы вызываете с объектом как аргумент
  3. (что Вы, вероятно, хотите) - добавление нового метода к объекту (или замена существующей).

Пример опции 3 (отредактированный для удаления использования "нового" модуля - Это удерживается от использования, я не знал):

import types
class someclass(object):
    val = "Value"
    def some_method(self):
        print self.val

def some_method_upper(self):
    print self.val.upper()

obj = someclass()
obj.some_method()

obj.some_method = types.MethodType(some_method_upper, obj)
obj.some_method()
5
задан Shog9 2 October 2009 в 21:20
поделиться

7 ответов

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

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

Бесплатного обеда не бывает.

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

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

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

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

4
ответ дан 13 December 2019 в 22:11
поделиться

Вам придется реализовать это самостоятельно, так как ничего не встроено, чтобы сделать это за вас.

С этой целью я предлагаю вам получить фактический исходный код для внедрения .Net string.format (фактически, соответствующий код находится в StringBuilder.AppendFormat () ). Он находится в свободном доступе и использует конечный автомат для очень эффективного обхода строки. Вы можете имитировать этот код, чтобы также пройти по вашей форматированной строке и извлечь эти данные.

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

3
ответ дан 13 December 2019 в 22:11
поделиться

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

1
ответ дан 13 December 2019 в 22:11
поделиться

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

1
ответ дан 13 December 2019 в 22:11
поделиться

Вроде сборник всех известных javascript-хаки, которые заставляют каждый браузер для правильной интерпретации кода

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

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

Если вам нужна абстракция коррекции css, вы можете проверить / IE7 / .

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

РЕДАКТИРОВАТЬ: (Я знаю, что у нас проблемы в других браузерах,

1
ответ дан 13 December 2019 в 22:11
поделиться

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

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

0
ответ дан 13 December 2019 в 22:11
поделиться

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

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

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
ответ дан 13 December 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: