2012-04-17 2 views
1

У меня есть функция JavaScript, которая выполняет комбинацию AJAX и строковых манипуляций для создания полной HTML-страницы в виде строки. I.e .:Могу ли я предварительно использовать iframe с контентом из JavaScript?

var markup='<html><body>Hello world!</body></html>'; 

Это очень упрощено, и я не могу гарантировать, что структура HTML предсказуема. Как я могу отобразить это содержимое на странице? Я думаю, что iframe имеет наибольшее значение, поскольку строка содержит полную HTML-страницу, но я не знаю, как вводить разметку в iframe.

Я не хочу создавать другой физический файл только для использования в качестве «прокси», поэтому я надеюсь на решение, которое может быть полностью включено в одну страницу HTML.

ответ

4
var iframe = document.createElement("iframe"); 
var doc = iframe.contentDocument; // a about:blank 
doc.open(); 
doc.write(htmlstring); 
doc.close(); 

работает для меня. Я также использовал <object> s с данными-uri в их атрибуте data, например. для отображения XML-документов:

var object = document.createElement("object"); 
object.setAttribute('data', "data:text/xml, "+xmlstring); 

Вы также можете использовать <object data="about:blank"> вместо фрейма, чтобы получить contentDocument перезаписать.

+0

Это отлично работало. Благодаря! – Jeff

0

Забудьте о iframe, найдите jQuery.html() и обрезайте голову.

+0

Я попытался это первый, но я испытывал необычные проблемы. Обертка разметки в объекте jQuery возвращала массив вместо элемента dom. Это, вероятно, еще один вопрос о SE. – Jeff

0

Я думаю, вы должны попробовать что-то вроде jQuery thickbox, которое может создать модальное дочернее окно внутри вашего HTML-документа и сделать что-то похожее на то, что вы ищете, но да, для этого вам придется сбрасывать содержимое внутри DIV, что вы можете создавать «на лету».

Смотрите, если ниже пост помогает: http://blogs.digitss.com/technology/hacking-jquery-thickbox/

-1

Использование JQuery вы можете просто сделать это:

Или, если вы можете вырезать теги вы не хотите:

markup = markup.replace(/(</?html>|</?body>)/gi, ""); 
$('#divId').html(markup); 

ПРИМЕЧАНИЕ. Я понятия не имею, как выглядит входной HTML, поэтому убедитесь, что вы можете e HTML перед запуском этого кода. Это пример, который поможет вам начать работу.

Это использует DIV так:

<div id="divId">Content will go here</div> 
+0

-1 для «разбора» html с регулярным выражением. Кроме того, ваша попытка не будет обрезать теги, такие как head, meta, title ... и т. Д. – BiAiB

+0

Уведомление Я сказал «если можно». Это просто пример. Я понятия не имею, каковы требования его приложения. –

+0

Я пробовал '$ ('# iframe'). Html (разметка)', но iframe просто оставался пустым. Предполагается, что он сможет так работать? – Jeff

1

Вы можете изменить HTML в качестве фрейма из JQuery, как этот

function get_me_html(){ 
    return '<html><body>Hello world!</body></html>' 
} 

$('iframe').contents().find('html').html(get_me_html()) 

увидеть это в действии здесь http://jsfiddle.net/anuraguniyal/Kegc3/7/

+0

Это сработало почти. Я видел, как он мерцает, а затем исчезает. Тогда iframe был пустым. Я подозреваю, что некоторые другие функции js, возможно, вмешивались, но я не искажал слишком много, потому что ответ Берги работал сразу. – Jeff

Смежные вопросы