2012-05-21 3 views
1

Я создаю приложение CMS, которое я отлаживаю сейчас для IE. Но вещи случаются, я не могу понять.Не удается получить доступ к содержимому iframe в IE

Сначала у меня есть div с содержимым страницы. Я извлекаю содержимое div и с javascript создаю iFrame и добавляю его в div. Это сделано для создания WYSIWYG-редактора. Затем, когда я хочу добавить контент в iFrame, проблемы начинаются. По какой-то причине IE не может получить доступ к телу iFrame. Я могу предупредить документ iFrame, который дает мне [object Document] или [object HTMLDocument], но когда я затем предупреждаю тело, я получаю null.

Я использую эту функцию для получения документа в части объектов JavaScript:

iframedoc: function(aID) { 
    if (document.getElementById(aID).contentDocument){ 
     return document.getElementById(aID).contentDocument; 
    } else { 
     var iFrame = document.getElementById(aID); 
     return iFrame.contentWindow.document; 
    } 
}, 

и это, где я называю это в первый раз:

tas[i].innerHTML = ""; 
tas[i].appendChild(ta_edit_functions); 
tas[i].appendChild(ta_edit); 
tas[i].appendChild(ta_result); 
alert(ta.iframedoc(ta_edit_id)); 
ta.iframedoc(ta_edit_id).body.innerHTML = ta_edit_content; 
ta.iframedoc(ta_edit_id).designMode = 'on'; 

Здесь я опорожнить DIV , добавьте div, содержащий функции WYSIWYG, iFrame и текстовое поле для отправки формы.

Я тестирую в IE 8 и 9. Самое страшное в том, что когда я ставил предупреждение перед первым вызовом iframedoc в IE 8, я внезапно получаю тело.

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

ответ

4

Я тестирую в IE 8 и 9. Самое страшное в том, что, когда я ставил предупреждение перед первым вызовом iframedoc в IE 8, я внезапно получаю тело.

Это звучит так, как будто вы слишком быстро заходите в браузер - iframe, вероятно, еще не полностью загружен, когда вы пытаетесь его использовать, поэтому добавление предупреждения дает ему дополнительное время. Попробуйте отложить некоторые из вашего кода, используя событие onload в элементе iframe.

+0

Это, безусловно, так! Добавление кода в событие onload iFrame показывает, что сначала добавляются iFrames (с использованием цикла, устанавливающего все div с тем же классом) и только после того, как этот цикл действительно загружен. Следующая проблема заключается в том, что я не могу определить идентификатор элемента, запускающего функцию, что действительно важно. Вызов «это» просто получает окно в IE8. Вы не знаете, как это сделать? – Raapwerk

+0

Я добавляю событие OnLoad с помощью этого: функция addOnload (элемент, функц) { \t если (element.attachEvent) возвращение \t \t element.attachEvent ('OnLoad', функц); \t else return element.addEventListener ('load', funct, false); } – Raapwerk

0

В конце концов мое решение использовало функцию интервальной проверки, если тело iFrame доступно.

Но с этими ошибками я обнаружил, что в IE8 включение дизайна для iFrame удаляет все содержимое. Таким образом, я закончил с использованием контента, пригодного для контента.