Можно выполнить это тремя способами:
Пример опции 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()
Кроме того, это дало бы стимул для веб-браузеров следовать стандартам или застревать в более медленном браузере из-за выполнения всего кода JavaScript.
Ну ... Это своего рода проблема. Не всякую несовместимость можно сгладить с помощью трюков JS, а другие станут слишком медленными, чтобы их можно было использовать, или сохранят незначительные несовместимости. Классическим примером является множество скриптов для имитации поддержки прозрачности в файлах PNG в IE6: они работали для простых ситуаций, но разваливались или становились чрезмерно медленными для страниц, которые творчески и широко использовали такие изображения.
Бесплатного обеда не бывает.
1239] Другие указали на конкретные ситуации, когда вы можете использовать сценарий для поддельных функций, которые не поддерживаются , или библиотеки, чтобы абстрагироваться от различий . Мой совет - подходить к этой проблеме по частям: напишите код для приличного браузера, максимально ограничивая себя общим набором поддерживаемых функций для критических функций. Затем используйте хаки, чтобы исправить браузеры, которые терпят неудачу, позволяя себе терять функциональность или изящно деградировать, когда это возможно, в старых / меньших браузерах.
Не ожидайте, что это будет слишком просто. Если бы это было так просто, вам бы за это не платили ...; -)
Не ожидаю, что это будет слишком просто. Если бы это было так просто, вам бы за это не платили ...; -) Не ожидаю, что это будет слишком просто. Если бы это было так просто, вам бы за это не платили ...; -)Вам придется реализовать это самостоятельно, так как ничего не встроено, чтобы сделать это за вас.
С этой целью я предлагаю вам получить фактический исходный код для внедрения .Net string.format (фактически, соответствующий код находится в StringBuilder.AppendFormat ()
). Он находится в свободном доступе и использует конечный автомат для очень эффективного обхода строки. Вы можете имитировать этот код, чтобы также пройти по вашей форматированной строке и извлечь эти данные.
Обратите внимание, что не всегда можно будет вернуться назад. Иногда отформатированная строка может содержать символы, соответствующие спецификаторам формата, что затрудняет или делает невозможным для программы узнать, как выглядел оригинал. Насколько я понимаю, вам, возможно, повезет больше, перейдя по исходной строке, чтобы превратить ее в регулярное выражение,
Вы не можете добиться полного соответствия стандартам, но можете использовать структуру, которая сглаживает некоторые из самых серьезных нарушений. Вы также можете использовать так называемую таблицу стилей сброса .
Для IE существует библиотека, которая делает его более похожим на совместимый со стандартами браузер: IE7 Дина Эдвардса .
Вроде сборник всех известных javascript-хаки, которые заставляют каждый браузер для правильной интерпретации кода
У вас есть два варианта: прочитать таблицы совместимости браузеров и изучить каждое исключение, которое есть в браузере, и создать его самостоятельно, или использовать доступные библиотеки.
Если вы хотите исправить javascript абстракции, вы можете использовать jQuery.
Если вам нужна абстракция коррекции css, вы можете проверить / IE7 / .
Обычно я не люблю использовать исправления CSS, сделанные с помощью javascript. Это еще одна сложность моего кода, еще одна библиотека, которая может вставлять ошибки в браузеры, которые уже содержат ошибки. Я предпочитаю создавать условных операторов для ie6, ie7 и т.п. и создавать отдельные таблицы стилей для каждого из них. Этот подход работает и не вызывает больших накладных расходов.
РЕДАКТИРОВАТЬ: (Я знаю, что у нас проблемы в других браузерах,
На самом деле вы можете, существует множество библиотек для решения этой проблемы. С самого начала проблема соответствия javascript всегда была проблемой для разработчиков, и благодаря новаторам, которые разработали библиотеки для решения этой проблемы ...
Один из них, и мой любимый - JQuery.
До 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/
Вероятно, это лучший ответ на ваш вопрос. Это делает браузеры максимально совместимыми со стандартами.