Я знаю, что это безумие, но IE может заставить человека делать сумасшедшие вещи.
Вот в чем дело: у нас есть сайт SharePoint 2007 с веб-частями редактора контента. У нас есть контингент пользователей с Internet Explorer 8. Мы хотим сохранить сайт в режимах стандартов IE8 / IE8 для лучшей визуализации контента. Однако эта конфигурация лишает возможности открывать окно Rich Text Editor из веб-части C.E.
Если принудительно включить IE8 в режим документов IE7 или режим причуд, это работает. Действительно, другие источники в Интернете предложили сделать именно это, чтобы решить проблему. Но мы бы предпочли, чтобы все работало в стандартном режиме.
В результате некоторой отладки мы обнаружили, что источником проблемы является использование document.all.index("<web_part_id>")
JavaScript при извлечении объекта веб-части на странице. В стандартах IE8 это возвращает объект с большинством свойств: пустым, нулевым или неопределенным; в частности, свойство id
не установлено. Если вы должны использовать document.getElementById
для получения того же идентификатора, вы получите полностью заполненный объект. Аналогично, если IE8 равен , а не в стандартном режиме, вы получаете в основном (но не полностью) заполненный объект - но достаточно заполненный, чтобы избежать ошибки скрипта.
Весь этот код выглядит так, как будто он динамически внедряется в страницу SharePoint, поэтому исключается простая замена ссылок на document.all
. Однако у нас появилась сумасшедшая идея переопределить метод document.all.item
для фактического вызова document.getElementById
. Наши попытки сделать это пока не работают, поэтому, возможно, кто-то может пролить свет на то, что мы делаем неправильно (хорошо, в этом много неправильного, но это IE и SharePoint, верно?).
Наша первоначальная попытка переопределения выглядит следующим образом:
<script type="text/javascript">
document.all.item = function(id) { return document.getElementById(id); }
</script>
Этот код находится в документе HEAD
, выше любых других ссылок на сценарии (SharePoint или иным образом), но он не заменяет собственный код.
Мысли, идеи, предложения и критика приветствуются!