Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Динамическое создание Iframe (https://javascript.ru/forum/dom-window/9463-dinamicheskoe-sozdanie-iframe.html)

Арсений 18.05.2010 16:47

Динамическое создание Iframe
 
Нужно создать динамически Iframe
я создаю его таким вот путем
var el = document.createElement("iframe");
document.body.appendChild(el);
el.id = 'iframe';
el.style.width = "50px";
el.style.height = "50px";
el.src = 'test_2.html';


но почему то ругается на
document.body.appendChild(el);
уже перерыл гугл ни как не могу найти альтернативный вариант создания Ifremа. Толи я поисковиком не умею пользоваться толи я, что то не так делаю.

Kolyaj 18.05.2010 16:52

Как ругается-то?

Арсений 18.05.2010 16:56

фаер баг пишет вот такое
document.body is null
error source line: [Break on this error] document.body.appendChild(el)[0];

Kolyaj 18.05.2010 17:02

Значит body ещё нет, когда вы в него добавить пытаетесь.

Арсений 18.05.2010 17:07

понял :) спс :)

Арсений 18.05.2010 17:38

у меня тогда еще вот такой вопрос.
я создаю Iframe с помощью кода приведенного выше, а затем мне нужно взять некоторые значения из той страницы, что он загружает в себя для этого я делаю так
var div = el.contentWindow.document.getElementsByClassName('123')[0].innerHTML;  
alert(div.innerHTML);


но alert не вызывается.
почему такое может быть ?это из за того, что Iframe создается и тут же удаляется? или написано в коде не правильно?

Skipp 18.05.2010 17:51

getElementsByClassName <- не кросбраузерный метод(если ты конечно его не переопределял(что думаю врятли)). Измени на getElementById, только предварительно измени строку
el.id = 'iframe';
на
el.setAttribute("id", "iframe");

И проверь чтоб в этот момент у тебя iframe был!

Kolyaj 18.05.2010 18:23

Цитата:

Сообщение от Арсений
Iframe создается и тут же удаляется?

А загрузку ждёте?

Арсений 18.05.2010 18:44

попробовал так как сказал Skipp
и мне выдало вот такую ошибку
el.contentWindow.document.getElementById("123") is null
error source line: [Break on this error] var div = el.contentWindow.document.getElementById('123')[0].innerHTML;

я так понимаю, что это как и в прошлый раз было с body, только тут Iframe еще не загрузилось, а поиск нужно мне элемента уже начался? или тут в чем то другом ошибка?

Kolyaj
я не понял вопроса:) получается я клацаю на кнопку и вижу как появляется Iframe и тут же исчезает но alert так и не появляется

Kolyaj 18.05.2010 20:58

Чтобы документ в iframe загрузился, нужно время.

autosoft 18.05.2010 23:16

А что бы правильно дождаться - нужно в таймере обработку делать.
К примеру так:
var doc = iframe.contentDocument ? iframe.contentDocument :
iframe.contentWindow.document ? iframe.contentWindow.document :
window.frames['name iframe'].document

if (doc.location.href != 'about:blank') {

    var body = doc.body

    // ...
}

autosoft 18.05.2010 23:30

el.setAttribute("id", "iframe");

В IE может и не сработать...

Лучше так:
var ua = navigator.userAgent.toLowerCase()
var is_opera = ua.indexOf('opera') >= 0
var is_ie = !is_opera && ua.indexOf('msie') >= 0

var name = 'iframe'

var el

if (is_ie) el = document.createElement('<iframe id=' + name + '>')
else {

    el = document.createElement('iframe')
    el.setAttribute('id', name)
}

// ...

Арсений 19.05.2010 15:03

ого всем спасибо сейчас буду пробовать:)


Часовой пояс GMT +3, время: 22:47.