Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: завершение загрузки iFrame
 
 автор: DmitryBerkut   (26.11.2007 в 19:42)   письмо автору
 
 

загружается iframe и скрипт обрабатывает данные из него. Но скорость интернета скачит и иногда шаг загрузки фрейма не подходит и в ситуации, когда iframe не успел загрузиться, скрипт при попытке работы с данными и/или объектами этого контейнера iframe выдает ошибку. Вопрос, можно ли создать обработчик загрузки iframe. Т.е. проверку, если iframe - не загрузился скрипта возвращает переменную false, в противном случае - true???


<html><head>
<meta http-equiv="content-type" content="text/html; charset=win-1251">

<script language="JavaScript">
var link ='http://www.somelink.ru/', numlink = 2280;
L = new Array();
var timerRunning = false;

function f1() {
       window.onerror = null;
       document.all._txt.value = '';
          document.all._ifr.src = link + numlink + '/';
          document.all._url.value = document.all._ifr.src;
          numlink++;
          //var L = document.frames._ifr.document.images;
          //var Ak = document.frames._ifr.document.links;
          var unik111 = setTimeout ("f2()", 15000);
   }

function f2 () {

    window.onerror = null;
    var Ak = document.frames._ifr.document.links;
    Ak.onerror = null;
  
    var L = document.frames._ifr.document.images;
    L.onerror = null;

             document.all._txt.value = 'alt='+ L[39].alt + 'src=' + L[39].src + '.' + '\r\n';

 
         var fso = new ActiveXObject ('Scripting.FileSystemObject'),
         f = fso.OpenTextFile ('C:/My_folder/alt_src.txt', 8, true);
         f.Write (document.all._txt.value);
         f.Close ();
        

     
        var fso = new ActiveXObject ('Scripting.FileSystemObject'),
         f = fso.OpenTextFile ('C:/My_folder/last.txt', 8, true);
         f.Write (numlink+'\r\n');
         f.Close ();

        numlink++;
     
        document.all._ifr.src = link + numlink + '/';
        document.all._url.value = document.all._ifr.src;
        flush = setTimeout ("f2()", 12000);              //   Шаг ************
  
}
</script></head>
<body bgcolor="#cecece" style="margin: 0">
<table bgcolor="yellow" cellpadding="8" cellspacing="0" width="100%">
<tr><td width="20%">Куда&nbsp;идём&nbsp;авторизоваться:
<td width="40%"><input id="_url" style="width: 100%" value="http://">
<th width="20%"><input type="button" style="width: 40%" value="GO" onclick="f1()">
</table>
<br><iframe align="center" id="_ifr" style="width: 90%; height: 70%"></iframe><br>
<table bgcolor="aqua" cellpadding="8" cellspacing="0" width="100%">
<tr><td><input type="button" style="width: 30%" value="sbros" onClick="popa()"></td>
<td><input type="button" style="width: 30%" value="next" onClick="flush()"></td></tr>
</table><br><br>
<table bgcolor="aqua" cellpadding="8" cellspacing="0" width="100%">
<tr><td><textarea id="_txt" style="width: 100%" rows="10">(результат работы)</textarea></td></tr>
</table><br>
<br>
</body></html>

   
 
 автор: DmitryBerkut   (26.11.2007 в 21:17)   письмо автору
 
   для: DmitryBerkut   (26.11.2007 в 19:42)
 

Але, народ. Мне может кто-нибудь ответить? Каким образом посредством JS можно "вытащить" из iframe признак того, что он загрузился на 100%???

   
 
 автор: DmitryBerkut   (26.11.2007 в 22:24)   письмо автору
 
   для: DmitryBerkut   (26.11.2007 в 21:17)
 

В цикле я задаю url для iframe, ставлю таймер, и через определенное время в iframe подгружается новый документ, из которого я извлекаю необходимую мне информацию. Но это дубовый способ. Возможно ли сделать все так как полагается? А именно, есть ли какой нибудь контроль на полную загрузку iframe? onLoad для iframe уже пробовал, он, естественно не помогает, поскульку он только первый раз проверяет при первом открытии, естественно же при загрузках документов в iframe в цикле onLoad - не пашет. Уважаемые знатоки, помогите разобраться. Вся надежда на Вас...

   
 
 автор: CNT   (27.11.2007 в 18:55)   письмо автору
 
   для: DmitryBerkut   (26.11.2007 в 21:17)
 

Тег <IFRAME> прекрасно работает с инструкцией по событию ONLOAD.
Именно по окончании загрузки это событие сработает - это и будет свидетельствовавть о 100% загрузки.

Единственный нюанс - при первоначальной загрузке страницы, на которой есть <IFRAME onload="myFunc ()"> вызовет функцию myFunc даже если в теге IFRAME не указан SRC.
Решений два:
1. Ввести флаг myFlag = false и в функции myFunc () первым оператором проверять значение этого флага и при первом же вхождении его изменять: if (!myFiag) {myFlag = true; return}
2. Прописывать тег <IFRAME> в HTML-коде и без SRC, и без ONLOAD, а по окончании первоначальной загрузки страницы добавить это событие для ифрейма:
onload = function ()
{document.all._ifr.attachEvent ('onload', myFunc);} 
(этот код сработает в MSIE - а именно он, судя по ActiveX, вас и интересует)

   
 
 автор: DmitryBerkut   (27.11.2007 в 19:09)   письмо автору
 
   для: CNT   (27.11.2007 в 18:55)
 

Это круто, сейчас попробую.

   
 
 автор: DmitryBerkut   (27.11.2007 в 19:19)   письмо автору
 
   для: CNT   (27.11.2007 в 18:55)
 

А можно чуточку, по-конкретнее? Куда мне втулить эту функцию onLoad = function()? А то я малость запутался...

   
 
 автор: CNT   (27.11.2007 в 21:35)   письмо автору
 
   для: DmitryBerkut   (27.11.2007 в 19:19)
 

<html>
<head>
<script>
function myFunc () {alert ('GOOGLE в ифрейм загружен!')}

onload = function () {document.all._ifr.attachEvent ('onload', myFunc)}
</script>
</head>
<body>
...
<iframe id="_ifr"></iframe>
...
<input type="button" value="Грузим в ифрейм GOOGLE" onclick="document.all._ifr.src = 'http://google.com';">
</body>
</html>

   
 
 автор: DmitryBerkut   (28.11.2007 в 13:17)   письмо автору
 
   для: CNT   (27.11.2007 в 21:35)
 

Спасибо большое, но - ТЕМА ЗАКРЫТА, Я сделал так, как показано в предпоследнем топике. Большое спасибо еще раз за помощь!!!

   
 
 автор: DmitryBerkut   (27.11.2007 в 13:41)   письмо автору
 
   для: DmitryBerkut   (26.11.2007 в 19:42)
 

Блин, народ!!! Неужели никто не может второй день дать ответ?

   
 
 автор: bronenos   (27.11.2007 в 13:45)   письмо автору
 
   для: DmitryBerkut   (27.11.2007 в 13:41)
 

Народ про себя вспоминает - а как я это делал?
Лично я пытался... но потом решил свою задачу решать иным способом, так что я - ХЗ =)

   
 
 автор: DmitryBerkut   (27.11.2007 в 15:35)   письмо автору
 
   для: bronenos   (27.11.2007 в 13:45)
 

Браво!!! Жаль что тут смайлов нет подходящих, к примеру как в квипе, чтобы достоверно выражать эмоции))!!!

   
 
 автор: DmitryBerkut   (27.11.2007 в 16:14)   письмо автору
 
   для: bronenos   (27.11.2007 в 13:45)
 

Народ, действительно очень нужно. Ну ёп.. тыть, невозможно оставить скрипт сам без присмотра, только отойду, ошибка, только пойду на обед, - ошибка, пойду домой на-ночь - утром прихожу на работу - ошибка. Может кто сталкивался с этой проблемой, и обходил ее каким-нибудь другим способом, поделитесь. Действительно очень нужно! Как дите малое - скрипт - не могу сам-на-сам оставить на пару минут, сразу покопорится...

   
 
 автор: DmitryBerkut   (27.11.2007 в 17:23)   письмо автору
 
   для: DmitryBerkut   (27.11.2007 в 16:14)
 

Я что в черном списке нахожусь, или как? Или просто некому помочь? или впадло отвечать? Ау? Есть кто живой???

   
 
 автор: bronenos   (27.11.2007 в 17:43)   письмо автору
 
   для: DmitryBerkut   (27.11.2007 в 17:23)
 

а может никто не знает

   
 
 автор: DmitryBerkut   (27.11.2007 в 17:59)   письмо автору
 
   для: bronenos   (27.11.2007 в 17:43)
 

Та знает знает, просто нет в онлайне тех чуваков, реальных, которые мне помогали всегда)!)

   
 
 автор: RMW   (27.11.2007 в 18:03)   письмо автору
 
   для: DmitryBerkut   (27.11.2007 в 17:23)
 

1. В ie у объекта document есть свойство readyState.

2.Если возможно в страницы загружаемые в ифрейм помещайте скрипт который будет сообщать родительскому окну, что его документ загружен.

3. Проверять существование нужных объектов прежде чем к ним обращаться. В случае неудачи повторять попытку после таймаута.

   
 
 автор: DmitryBerkut   (27.11.2007 в 18:28)   письмо автору
 
   для: RMW   (27.11.2007 в 18:03)
 

Можно пожалуйста 3-й пункт пример?

   
 
 автор: DmitryBerkut   (27.11.2007 в 18:52)   письмо автору
 
   для: RMW   (27.11.2007 в 18:03)
 

Ну, ок! Допустим я нашел ответ, на 3-й пункт, на этом форуме:

<script language="JavaScript">

if(document.getElementById('el')) alert('Объект есть');

</script>

Но он применим в общем случае. А мне необходимо делать на проверку существования объект-картинку, порядковый номер которой равняется в общем массиве картинок всего документа - 80. Т.е. мне необходимо проверить на существование весь массив????? Опять же таки глухой угол, потому что может успеть загрузиться только парочка элементов этого массива объектов Image().

<script language="JavaScript">

var L = document.frames.ifrname.document.images;

</script>

   
 
 автор: RMW   (27.11.2007 в 19:04)   письмо автору
 
   для: DmitryBerkut   (27.11.2007 в 18:52)
 

Я гляжу у вас под ie заточено.
Тогда можно так:
if(document.frames.ifrname.document.readyState == 'complete')//работаем с ифреймом;
else //ждём немного и пробуем ещё раз;
По пункту 3 пример могу написать позже если ещё будет нужно.

   
 
 автор: DmitryBerkut   (27.11.2007 в 19:33)   письмо автору
 
   для: RMW   (27.11.2007 в 19:04)
 

Круто!!! Помогло!!!! Сделал вот так:

if(document.frames._ifr.document.readyState == 'complete')alert("Загрузило!!!");
    else{setTimeout("f2()", 5000); return;}

Работает. А теперь последний вопрос и завязываем: указав 'return' тем самым я предотвратил дальнейшее выполнение функции, или она будет до конца своего тела клепать все что ниже????

   
 
 автор: DmitryBerkut   (27.11.2007 в 20:07)   письмо автору
 
   для: DmitryBerkut   (27.11.2007 в 19:33)
 

Вобщем я уже сам выяснил и експериментально, и теоретически. ВСЁ - ВСЕМ СПАСИБО И ОГРОМНЫЕ БЛАГОДАРНОСТИ. ТЕМА ЗАКРЫТА!!!!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования