Столкнулся со странной проблемой. IE версий от 6 по 8-ю выдавал ошибку 80004004 при открытии страницы, причем она совершенно нормально работала в Opera и Firefox.
На странице использовался плагин Jquery ColorPicker и расследование показало, что ошибка возникает при выполнении вставки кода диалога выбора в документ:
cal.appendTo(document.body);
Замена этого кода на
window.document.body.appendChild(tpl);
привела к тому, что ошибка заменилась на "Не удалось завершить действие. Ошибка 80020005". Гугл в конце концов вывел на обсуждение схожей проблемы. Оказалось, что подобная ошибка возникает когда скрипт пытается что-либо добавить в конец документа до окончания формирования DOM-дерева.
Решение оказалось чрезвычайно простым. Изначальный код подключения диалога выбора цвета
$('#my-id').ColorPicker({
"onSubmit": function(hsb, hex, rgb) {
$('#my-id').val('#'+hex);
},
onBeforeShow: function () {
$(this).ColorPickerSetColor(this.value);
}
})
.bind('keyup', function(){
$(this).ColorPickerSetColor(this.value);
});
Был заменен на
$(window).load(function () {
$('#my-id').ColorPicker({
"onSubmit": function(hsb, hex, rgb) {
$('#my-id').val('#'+hex);
},
onBeforeShow: function () {
$(this).ColorPickerSetColor(this.value);
}
})
.bind('keyup', function(){
$(this).ColorPickerSetColor(this.value);
});
});
Таким образом мораль: никогда не работайте с DOM-деревом до его построения, даже если ваш любимый браузер это позволяет.
Комментариев нет:
Отправить комментарий