Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.01.2012, 20:02
Аспирант
Отправить личное сообщение для syegorius Посмотреть профиль Найти все сообщения от syegorius
 
Регистрация: 28.08.2010
Сообщений: 91

Как синхронно загрузить 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) нельзя, и нельзя использовать таймоут и интервал... Т.е. нужен какой то способ как в аяксе, просто указать асинк=фалсе

Заранее спасибо за ответы!
Ответить с цитированием
  #2 (permalink)  
Старый 02.01.2012, 20:10
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

ну дык и укажите async false, кто вам мешает это сделать?
Ответить с цитированием
  #3 (permalink)  
Старый 03.01.2012, 02:59
Аспирант
Отправить личное сообщение для syegorius Посмотреть профиль Найти все сообщения от syegorius
 
Регистрация: 28.08.2010
Сообщений: 91

если в jquery, то async false я уже давно там поставил,причем даже в двух местах, но всеравно работает так как я описал выше
Ответить с цитированием
  #4 (permalink)  
Старый 03.01.2012, 03:48
Аспирант
Отправить личное сообщение для syegorius Посмотреть профиль Найти все сообщения от syegorius
 
Регистрация: 28.08.2010
Сообщений: 91

вот кстати, да бы никто не мучался и не копался в 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(че-то), причем не работает в хроме если кто подскажет как ее заставит работать в хроме, то буду вдвойне благодарен!
Ответить с цитированием
  #5 (permalink)  
Старый 03.01.2012, 04:29
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Замените load на ajax
Ответить с цитированием
  #6 (permalink)  
Старый 03.01.2012, 06:51
Аспирант
Отправить личное сообщение для syegorius Посмотреть профиль Найти все сообщения от syegorius
 
Регистрация: 28.08.2010
Сообщений: 91

Сообщение от zebra Посмотреть сообщение
Замените 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!')?
Ответить с цитированием
  #7 (permalink)  
Старый 03.01.2012, 07:08
Аспирант
Отправить личное сообщение для syegorius Посмотреть профиль Найти все сообщения от syegorius
 
Регистрация: 28.08.2010
Сообщений: 91

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

Цитата:
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. будет ли такой способ работать в гавно-браузерах типа интернет эксплорера (попробовал только в мозиле)?

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

Последний раз редактировалось syegorius, 03.01.2012 в 07:22.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как загрузить массив из файла satyr22 Internet Explorer 4 21.08.2011 21:04
Как узнать размер загружаемого файла? shkarbatov Серверные языки и технологии 5 14.08.2011 17:12
Как узнать ссылку текущей страницы в iframe? interwass Общие вопросы Javascript 3 22.06.2011 10:51
как открыть стр. в iframe -окне d4a1 Общие вопросы Javascript 1 03.09.2010 21:33
Как загрузить удаленную страницу zhyr Общие вопросы Javascript 2 10.08.2009 10:08