Как вставить html в iframe

Привет всем: мне нужно вставить строку html в iframe, как показано ниже:

....

var html = "<html><head><title>Titolo</title></head><body><p>body</p></body></html>"

jQuery('#popolaIframe').click(function() {
  parent.$("#indexIframe")[0].documentElement.innerHTML = html;     
}); 

Есть ли способ добиться этого?


person Massimo Ugues    schedule 06.05.2010    source источник
comment
В качестве возможной альтернативы (не зная, чего вы хотите достичь): рассмотрите возможность использования div с overflow:auto; для получения эффекта «iframe» (= ограниченная область с выделенной полосой прокрутки).   -  person pinkgothic    schedule 06.05.2010
comment
Div не является альтернативой, так как я получаю html с тегом заголовка. Заполнение div сформированным таким образом html приводит к тому, что браузер удаляет все содержимое заголовка.   -  person Massimo Ugues    schedule 06.05.2010
comment
Да, я вижу твою проблему. Вам, возможно, придется придерживаться этого направления мысли, однако, насколько мне известно, это то, что относится к политике одинакового происхождения JavaScript, поэтому вам, возможно, придется извлечь часть <body> и любые данные заголовка, которые необходимо сохранить (например, таблицы стилей). В любом случае, удачи. :)   -  person pinkgothic    schedule 06.05.2010


Ответы (6)


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

person Delan Azabani    schedule 06.05.2010
comment
Код не работает. Это ниже работы. parent.$(#indexIframe)[0].contentDocument.body.innerHTML = foo; Проблема в том, что, поскольку я получаю хорошо сформированный html с содержимым заголовка, я не могу поместить его в contentDocument.body. - person Massimo Ugues; 06.05.2010

Похоже, вы можете получить ссылку на тело, поэтому я не понимаю, почему бы и нет:

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_iframe_contentdocument

person Ged    schedule 06.05.2010
comment
Нет, я не могу ссылаться на тело: так как мне нужно ввести правильный html с заголовком и телом: настоящий html таков: var html = '‹html›‹head›‹link rel=stylesheet type=text/css href=./ style.css/›‹/head›‹body›‹p›body‹/p›‹/body›‹/html›'; И если я вставлю html в document.body.innerHTML, все содержимое заголовка будет удалено. С уважением - person Massimo Ugues; 06.05.2010
comment
хотя и нежелательно в теле при нормальных обстоятельствах... сработает ли это, если вы поместите тег link в тело? - person scunliffe; 06.05.2010
comment
Он работает с браузерами, поскольку браузеры не обрезают определение. Я получаю проблему с jQuery api clone() с ie6, и проблема вызвана тегом ссылки в теле. До сих пор ищу.... :) - person Massimo Ugues; 10.05.2010

Вы потеряли 1 уровень, вам нужно изменить innerHtml тела, но не документа:

document.body.innerHTML = bla-bla
person Dewfy    schedule 06.05.2010

Вы не можете вставить в iframe, если вы не remove() iframe и не используете 'append (html)'. Вы можете вставить его внутрь тела iframes, например

$('body',parent.$("#indexIframe")[0].contentWindow.document).html(html)
person Aniket Thakur    schedule 29.08.2014

В качестве альтернативы, если вы не уверены в родительском элементе, вы можете сделать это:

var doc = $.find("#myIframe")[0].contentWindow.document; //that will look in the whole dom though
doc.open();
doc.write(html);

По крайней мере, это сработало в моем случае :)

person Lys    schedule 22.10.2014

person    schedule
comment
Я не мог найти это решение, вот что-то похожее, которое сработало для меня: mydoc = document.getElementById('iframe_id').contentWindow.document; mydoc.write(html_code); mydoc.close(); - person ılǝ; 17.12.2012
comment
Я не думаю, что document.close здесь нужен, так как document.write сделает это сам. .close тоже происходит неявно. - person Benjamin Gruenbaum; 23.06.2013