Доступ к фреймам через DOM в IE - PullRequest
3 голосов
/ 21 января 2009

ОК, любой другой браузер работает хорошо с методом, который я до сих пор кодировал, но по какой-то причине Internet Explorer не будет работать. Я потратил часы времени (больше времени, чем собственно на разработку этой функции!) На совместимость и близок к тому, чтобы сдаться!

У меня есть форум, и одной из его полезных функций является редактор WYSIWYG. Для этого у меня по существу есть IFrame, который действует как документ:

<iframe name="writer" src="/scripts/blank.html" class="writer"></iframe>

Это текущее состояние JavaScript (постоянно обновляется):

function initEditor()
{
    w = frames['writer']
    wc = g('writerCopy')

    if(w == null) return

    frames['writer'].document.designMode = 'on'
    frames['writer'].document.body.innerHTML = styleSheet+wc.value
    frames['writer'].focus()
}

Теперь он работает частично, но не работает на линии:

frames['writer'].document.body.innerHTML = styleSheet+wc.value

в Internet Explorer со значением «frames.writer.document.body» является нулевым или не является объектом ».

Ответы [ 7 ]

1 голос
/ 01 августа 2009

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

Простое решение состоит в том, чтобы переместить вызов InitEditor () из тела в сюда:

<body onload="InitEditor()">
1 голос
/ 17 февраля 2010

Возможно, iframe еще не загружен. Я могу продублировать вашу ошибку «frames.writer.document.body» является нулевой или не является объектом ». Я добавил setTimeout вокруг него, и тогда он работал для меня.

setTimeout(function () {
    frames['writer'].document.body.innerHTML = "some text";
}, 200);
1 голос
/ 22 января 2009

Вы должны указать свой iframe на фиктивный документ для IE. Просто создайте файл blank.html со следующим:

<html><body></body></html>

и установите <iframe src="blank.html" ... >

Тогда вы можете сослаться на frame.document.body.innerHTML = '...' на ваше сердце.

Кстати, это ужасное название вопроса.

1 голос
/ 21 января 2009

Я даже не уверен, что IE поддерживает этот дизайн.

И, .contentDocument - это только IE8, IE7 и менее использует .contentWindow.document, но окна iframe являются частью коллекции кадров.

попробуйте это, должен быть кросс-браузер:

<iframe name="writer"></iframe>

frames["writer"].document.body.innerHTML = "some html...";
1 голос
/ 21 января 2009

Активировали ли вы отладку IE средства ?

0 голосов
/ 25 января 2009

В конце я использовал frame ['frameName']. Document.write ('someText'), но только если другой метод завершился неудачей.

0 голосов
/ 21 января 2009

Я что-то здесь упускаю? Разве вы не должны использовать что-то вроде:

window.frames[nameOrNumberOfFrame]...

См. Также в MSDN :

Эта коллекция содержит только окно объекты и не обеспечивает доступ к соответствующий кадр и фрейм объекты. Чтобы получить доступ к этим объектам, используйте все коллекция для документа содержащий объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...