Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Полная загрузка IFRAME


Автор: Grin 16.6.2006, 19:49
Есть страничка в которую встроен IFRAME
Код

<iframe id="mymap" name="mymap" src="http://test.ru/home.html"></iframe>

после чего идёт JS скрипт который должен обратиться к фрейму и взять какуюто информацию, но т.к. фрейм очень большой то скрипт срабатывает в холостую.
Как можно сделать задержку на загрузку, а лучше дождаться полной загрузки фрейма? smile  

Автор: Grin 17.6.2006, 11:01
Ну и где же добрые модераторы этого раздела?  smile 
Мне конибуть поможет, или на крайний случай совет даст  smile  

Автор: S.A.P. 17.6.2006, 11:56
Код

<iframe id="mymap" name="mymap" src="http://test.ru/home.html" onload="my_func()"></iframe>
 

Автор: Grin 17.6.2006, 18:17
S.A.P.
У меня немного сложнее ситуация
Код

<iframe id="mymap" name="mymap" src="http://test.ru/home.html"></iframe>

<script type="text/javascript">
<!--
function ONLINE(name) {
var USER_online = frames.mymap.document.getElementById('user_on').innerText;
// обработка
}
//-->
</script>

<br />
<br />
<script>
ONLINE("123");
</script>
<br />
<br />
<script>
ONLINE("987");
</script>
 

Автор: Sardar 17.6.2006, 18:28
Grin, лови onload в документе что в ифрейм подгружен, кидай событие (вызови функцию) своему parent'у. Ещё лучше если задачу (по смыслу, а не как ты видишь кодом) выложишь, чую кривое что то получаеться. 

Автор: Grin 17.6.2006, 18:39
2 Sardar,
Вообщем моя задача сделать Online/Offline для IBP 1.3 (доступа к PHP нет, только шаблоны)
извините что без коментариев

index.html
Код

<html>
<body> 

<iframe id="mymap" name="mymap" src="http://test.ru/home.html"></iframe>

<script type="text/javascript">
<!--
function ONLINE(name) {
if (name == "{ibf.member.name}"){                          
document.write('<img src="http://test.ru/ON.gif" border="0" />');
} else {
var USER_online = frames.mymap.document.getElementById('user_on').innerText;
USER_online = USER_online.replace(name,"[ИМЯ]");
IMYA = USER_online.indexOf("[ИМЯ]");
USER_online = USER_online.substring(IMYA,IMYA + 5);
if (USER_online == "[ИМЯ]") {
document.write('<img src="http://test.ru/ON.gif" border="0" />');         
} else { 
document.write('<img src="http://test.ru/OFF.gif" border="0" />');

}
}
//-->
</script>

<br />
<br />
<script>
ONLINE("Вася");
</script>
<br />
<br />
<script>
ONLINE("LOL");
</script>
<br />
<br />
<script>
ONLINE("KOK");
</script>
<br />
<br />
<script>
ONLINE("LOL");
</script>
<br />
<br />
<script>
ONLINE("LOL");
</script>
<br />
<br />
<script>
ONLINE("MOM");
</script>
<br />
<br />
<script>
ONLINE("1qaz");
</script>
<br />
<br />
<script>
ONLINE("LOL");
</script>


home.html
Код

<html>
<body>
<div id="user_on"><a href=''><b><span style='color:red'>LOL</b></span></a>

<a href=''><span style='color:orange'>Capriz</span></a></div>
</body>
</html>
 

Автор: Sardar 18.6.2006, 03:12
Grin, какой же это чудовищный изврат smile

Проще всего конечно XMLHttpRequest'ом дёргать статус каждо пользователя, но раз доступа к форуму нет... то можно сделать криво но просто, просто не выводить инфу о пользователе пока не загрузиться ифрейм. Как только загрузилось, тут же из ифрейма вызываешь апдейт основного документа выставляя инфу о статусе. Про onload говорили выше, либо на ифрейм, либо в home.htm на body.

Все: 
Код
<script>
ONLINE("Вася");
</script>


Заменяй на что нибудь удобней для выборки, например <div user="имя юзера"></div>. После когда из ифрейма список имён и их статусов известен пробегаешся по document.documentElement.getElementsByTagName("div"), выфильтровываешь всех кто имеет аттрибут user, достаёшь инфу у юзере и ставишь соответстующую картинку в полученный div.

Извратно конечно, но по моему лучшее когда всё надо на клиенте порешать.
 

Автор: Grin 18.6.2006, 10:19
2 Sardar
Интересный вариант надо попробовать.  smile  

Автор: Grin 18.6.2006, 16:24
2 Sardar
Цитата(Sardar @  18.6.2006,  04:12 Найти цитируемый пост)
После когда из ифрейма список имён и их статусов известен пробегаешся по document.documentElement.getElementsByTagName("div"), выфильтровываешь всех кто имеет аттрибут user,

А как зделать эту отфильтровку?
 

Автор: Sardar 18.6.2006, 16:53
Простейший пример:

Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
    <title>Untitled</title>
</head>

<body>
<script type="text/javascript">
<!--
function dataLoaded(data) {
  var d=document.getElementById("test").getElementsByTagName("span");
  for(var i=0; i < d.length; i++) {
     //собстно здесь и фильтрируем
     if(!d[i].getAttribute("mymarker") || !data["~"+d[i].getAttribute("mymarker")]) continue;
     d[i].innerHTML = data["~"+d[i].getAttribute("mymarker")];
  } 
}
//-->
</script>
<div id="test">
 <span mymarker="pre">Думали, что</span> мы <span style="font-weight: bold;">хавали</span> <span mymarker="what">апельсины и яблоки</span>...
</div>
<button onclick="dataLoaded({'~pre':'Анализы показали,', '~what':'какую то лабуду'});">Test</button>

</body>
</html>


Твой ифрейм по аналогии вызывает dataLoaded и передаёт всю инфу.  Этого же эффекта можно добиться не вводя свой аттрибут наподобие mymarker, например через коментарии, но с аттрибутами элегантней. Валидатор будет ругаться, пропиши в доктайпе свой аттрибут для требуемых элементов, он должен успокоиться. 

Автор: Grin 21.6.2006, 09:59
Большое СПАСИБО!!!  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)