Показать сообщение отдельно
  #8 (permalink)  
Старый 05.01.2012, 10:24
Аспирант
Отправить личное сообщение для syegorius Посмотреть профиль Найти все сообщения от syegorius
 
Регистрация: 28.08.2010
Сообщений: 91

И снова здраствуйте! Я вернулся)

Вообщем порыскал в нете, почитал статьи. Попробовал пару методов.
Решил остановиться на таком:

var eId='iframe-id',iframe=document.createElement('iframe'),yss=document.getElementsByClassName('yui-skin-sam'),src='data:text/html;charset=utf-8,'+encodeURIComponent('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><title>Title</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css"><!-- @import url("http://site.com/css/main.css");--></style></head><body contenteditable="false" class="editable" style="background:none"></body></html>');
    iframe.setAttribute('id',eId);
    iframe.setAttribute('name',eId);
    iframe.setAttribute('width','100%');
    iframe.setAttribute('frameborder',0);
    if(yss&&typeof yss[0]!='undefined'){
        /*#Начало - Первый выриант
        iframe.setAttribute('src','about:blank')
        yss[0].appendChild(iframe);
        
        if(iframe.contentDocument)doc=iframe.contentDocument;
        else if(iframe.contentWindow)doc=iframe.contentWindow.document;
        else if(window.frames[eId])doc=window.frames[eId].document;
        if(doc){
            doc.open();
            doc.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><title>Title</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css"><!-- @import url("http://site.com/css/main.css");--></style></head><body contenteditable="false" class="editable" style="background:none"></body></html>');
            doc.close();
            box=doc.getElementsByTagName('body')
            if(typeof box=='object'&&typeof box[0]=='object'){
                box=box[0]
                box.innerHTML='Hello World!'
            }
            else err()
            alert(box)
        }
        #Конец - Первый вариант*/

        /*Начало - Второй вариант*/
        iframe.setAttribute('src',src)
        yss[0].appendChild(iframe);
        
        $('iframe#'+eId).load(function(){
            if(iframe.contentDocument)doc=iframe.contentDocument;
            else if(iframe.contentWindow)doc=iframe.contentWindow.document;
            else if(window.frames[eId])doc=window.frames[eId].document;
            win=document.getElementById(eId).contentWindow.window
            box=$(this).contents().find('body').get(0)
            alert(box)
            $(box).html(Item[eId])
        })
        /*Конец - Второй вариант*/
    }


Сейчас использую Второй вариант. Но он правильно вставляет только в мозилле и опере, возможно и в ие, но я еще не проверял и при alert(box) выводит HTMLObj. В хроме же выводит undefined, хотя тег head заполнен правильно, а в body пусто.

Первый вариант во всех работает одинаково: выводит [object HTMLBodyElement], тег head заполнен правильно, а в body пусто.

Подскажите как быть. Заранее спасибо!
Ответить с цитированием