Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как синхронно загрузить iframe (https://javascript.ru/forum/events/24492-kak-sinkhronno-zagruzit-iframe.html)

syegorius 02.01.2012 20:02

Как синхронно загрузить iframe
 
Доброе время суток!

Есть iframe и вот такая вот каманда:

$('iframe#'+eId).load(function(){box=$(this).contents().find('body').get(0)})
alert(box.innerHTML)


Понятно что алерт виведет ошибку, т.к. iframe еще не успел загрузится.
Скажите как сделать так что бы алерт выполнялся только после загрузки iframe. Но вставлять его в функцию после box=$(this).contents().find('body').get(0) нельзя, и нельзя использовать таймоут и интервал... Т.е. нужен какой то способ как в аяксе, просто указать асинк=фалсе

Заранее спасибо за ответы!

devote 02.01.2012 20:10

ну дык и укажите async false, кто вам мешает это сделать?

syegorius 03.01.2012 02:59

если в jquery, то async false я уже давно там поставил,причем даже в двух местах, но всеравно работает так как я описал выше

syegorius 03.01.2012 03:48

вот кстати, да бы никто не мучался и не копался в jquery сама ф-ция лоад, где тут нада ставить фальсе не понятно:

load:function(a,b,d){
    if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);//всегда попадает сюда
    else if(!this.length)return this;
    var e=a.indexOf(" ");
    if(e>=0){
        var f=a.slice(e,a.length);
        a=a.slice(0,e)
    }
    e="GET";
    if(b)if(c.isFunction(b)){
        d=b;
        b=null
    }
    else if(typeof b==="object"){
        b=c.param(b,c.ajaxSettings.traditional);
        e="POST"
    }
    var h=this;
    c.ajax({
        url:a,type:e,dataType:"html",data:b,
        complete:function(l,k){
            if(k==="success"||k==="notmodified")h.html(f?c("<div>").append(l.responseText.replace(nb,"")).find(f):l.responseText);
            d&&h.each(d,[l.responseText,k,l])
        }
    });
    return this
}


и еще возможно это поможет - src у фрейма не путь на сайт, а вот такая штука: 'data:text/html;charset=utf-8,'+encodeURIComponent(че-то), причем не работает в хроме если кто подскажет как ее заставит работать в хроме, то буду вдвойне благодарен!

zebra 03.01.2012 04:29

Замените load на ajax

syegorius 03.01.2012 06:51

Цитата:

Сообщение от zebra (Сообщение 147793)
Замените load на ajax

я не совсем понимаю как заменить load на ajax, ведь ajax отправляет запрос на сервер, а мне с сервера ничего брать не надо, все что внутри фрейма я ввожу вот так: src='data:text/html;charset=utf-8,'+encodeURIComponent(че-то).

Если вы имеете ввиду заменить load на ajax что бы далее заполнить фрейм вручную как вот в примере:

var iframe=document.createElement('iframe'),yss=document.getElementsByClassName('yui-skin-sam')
yss[0].appendChild(iframe);
$(iframe).contents().find('body').html('Hello world!')


то я вообщем то даже и не против, только возникает вопрос - успеет ли браузер создать тег body (и вообще создаст ли он его без src), к тому моменту когда нужно будет выполнить $(iframe).contents().find('body').html('Hello world!')?

syegorius 03.01.2012 07:08

ну в общем только что попробовал сделать так как написал в последнем посте

Цитата:

var iframe=document.createElement('iframe'),yss=document.getElementsByClassName('yui-skin-sam')
yss[0].appendChild(iframe);
$(iframe).contents().find('body').html('Hello world!')
alert($(iframe).contents().find('body').html())

почти получилось, за исключением того что в окне браузера ничего не отображается, но алерт вывел "Hello world!"
В чем может быть проблема? И даже если дальше найду решение то все равно у меня есть большие сомнения по поводу последнего способа, а именно:

1. как создается тег боди?
2. будет ли такой способ работать в гавно-браузерах типа интернет эксплорера (попробовал только в мозиле)?

если кто сталкивался с таким явлением поделитесь опытом


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