powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как дождаться загрузки IFRAME?
21 сообщений из 21, страница 1 из 1
Как дождаться загрузки IFRAME?
    #36034768
ru_efim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Страничка содержит два IFRAME, необходимо определить загрузился ли первый и IFRAME и только после его загрузки загружать второй IFRAME. Как это реализовать?
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36034771
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У ифрейма есть событие onload.
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36035257
SergASh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShSergeУ ифрейма есть событие onload.
Не во всех браузерах. По спецификации его вообще быть не должно. Так что приходится делать периодический опрос. Надо смотреть в iframe.contentWindow.document и если он доступен пытаться понять по структуре пришел ли правильный ответ. jQuery в таком анализе сильно помогает.
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36035276
SergASh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот пример. Тут много лишнего, но выдирать не хотелось. По крайней мере он 100% рабочий.
dlg - это див-контейнер, в котором живет форма и ифрейм. Форма настроена на загрузку результата в этот ифрейм. Сервер по сабмиту возвращает текст, то есть ContentType: text/plain. Сам по себе текст - это JSON. Браузеры для text/plain строят DOM, который выглядит как <body><pre></pre></body>, так что анализ в данном случае труда не составляет.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
    var pollUploadStatus = function( dlg )
    {            
      var iframe = dlg.find( "IFRAME.target" ).get( 0 );
      
      var finallize = function( msg, error, result )
      {
        dlg.each( function() 
        { 
          var self = this;          
          self.unblock(); 
          self.displayMessage( { message : msg,          
                                 title : error ? "Ошибка" : "Сообщение",
                                 onclose : function()
                                 {
                                   if ( !error ) {
                                     dlg.find( "FORM" ).attr( "target", "" );
                                     dlg.find( "IFRAME.target" ).remove();
                                     closeDialog( dlg );                                     
                                     self.dialogOptions.onSuccess( result );                                     
                                   }
                                 }
                               } );
        } );        
      }
      var uploadSucceeded = function( data )
      {               
        finallize( dlg.get( 0 ).dialogOptions.successMessage, false, data );        
      }
      var uploadFailed = function( msg )
      {        
        finallize( dlg.get( 0 ).dialogOptions.failureMessage + msg, true );
      }                 

      var timeout = g_UploadTimeout;
      var enqueuePoll = function()
      {
        setTimeout( poll, g_PollInterval );
      }
      var poll = function()
      {
        // Check timeout
        timeout -= g_PollInterval;
        if ( timeout <= 0 ) {
          uploadFailed( "время ожидания окончания операции истекло" );
          return;
        }
        // Retrieve JSON content
        var json = undefined;
        try {
          json = $( iframe.contentWindow.document ).find( "BODY > PRE" ).html();
        } catch ( e ) {
          json = undefined;
        }
        if ( json == undefined || ( typeof( json ) == "string" && json.length == 0 ) ) {
          enqueuePoll();
          return;
        }    
        // Convert JSON to object
        var result;
        try {          
          eval( "result = " + json );
        } catch ( e ) {
          result = undefined;
        }
        if ( result == undefined || result.Success == undefined ) {
          uploadFailed( "неожиданный ответ от сервера" );
          return; 
        }
        // Check result
        if ( result.Success == true ) {          
          uploadSucceeded( result.Data );                    
        } else {
          var msg = "";
          var messages = result.ErrorMessages;
          if ( messages != undefined && messages.length != undefined && messages.length > 0 ) {
            if ( messages.length == 1 )
              msg = messages[0];
            else {
              for( var i = 0; i < messages.length; i++ )
                msg += "<li>" + messages[i] + "</li>";
              msg = "<ul>" + msg + "</ul>";
            }
          }          
          uploadFailed( msg );
        }
      }
      enqueuePoll();
    }
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36035309
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergASh
Не во всех браузерах

Огласите, пожалуйста, весь список...
SergASh
По спецификации его вообще быть не должно

Ссылочку на сие утверждение можно?
SergASh
Так что приходится делать периодический опрос. Надо смотреть в iframe.contentWindow.document и если он доступен пытаться понять по структуре пришел ли правильный ответ.

А заюзать onload parent'а нельзя?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36036822
ru_efim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, я думал все проще. Пока я не в состоянии понять ваши ответы. Направте пожалуйста что почитать, про DOM как я понял?
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36036858
ru_efim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл написать, мне достаточно чтоб в IE версии не ниже 6.5 работало. В первом IFARME загрузку которого надо отселживать, два календаря, пользователь выбирает нужные даты, даты сохраняются в переменных Session во время событий SelectionChanged календарей. Во второй IFRAME выводится выборка из базы данных за период ограниченный датами выбранными в первом IFRAME. Исходя из выше сказанного я и хотел отслеживать загрузку первого IFRAME. Может как то по проще можно в данном случае, чем SergASh предлагаете.
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36037362
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ru_efim
В первом IFARME загрузку которого надо отселживать, два календаря, пользователь выбирает нужные даты, даты сохраняются в переменных Session во время событий SelectionChanged календарей. Во второй IFRAME выводится выборка из базы данных за период ограниченный датами выбранными в первом IFRAME.

Т.е. у Вас ЭстЪ страничка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<html>
	<head>
		<title>search</title>
	</head>
	<body>
		<iframe src="calendar.aspx"></iframe>
		<iframe id="result" src="result.aspx"></iframe>
	</body>
</html>
Вы грузите search.aspx. В calendar.aspx рихтуете дату и попадаете на сервак в calendar.aspx.cs. Там Вы сохраняете даты в Session и на PostBack'е добавляете
Код: plaintext
1.
2.
3.
....
window.onload=function(){parent.document.getElementById("result").contentWindow.location.reload()}
....

P.S. А зачем Вам в этом случае вообще IFAME'ы? Для форсу бандитского? Разместите все на одной странице. А result заверните в div и рулите display: none/block... IMHO, так
ru_efim
как то по проще

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36038784
ru_efim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
....
window.onload=function(){parent.document.getElementById("result").contentWindow.location.reload()}
....
Извеняюсь за ламерский вопрос. Надо добавить, для того чтоб гарантировать перезагрузку страницы "result.aspx" после сохранения дат в session, я правильно понял?
А с IFRAME(который result) вынужден работать по той причине что в результате всей обработки туда PDF открывается при настройках AcrobatReader открывать в окне IE.
А первай IFRAME(который calendar.aspx), сделал для того чтоб при выборе дат и PostBack'ах, страницы Seach и Result не перезагружались и в результате визуально сосздается впечатление что ни чего не происходит.
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36038862
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ru_efim
Надо добавить, для того чтоб гарантировать перезагрузку страницы "result.aspx" после сохранения дат в session, я правильно понял?

Причем будет достаточно в calendar.aspx даже:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
private void Page_Load(object sender, System.EventArgs e)
{
	if(IsPostBack)
	{
		string
			JSString="\n<script type=\"text/javascript\">\n<!--\nparent.document.getElementById(\"result\").contentWindow.location.reload();\n// -->\n</script>";

			//Response.Write(JSString);
			// ||
			// LiteralJS.Text=JSString;
			// ||
			if(!IsStartupScriptRegistered("OnLoad"))
				RegisterStartupScript("OnLoad",JSString);
	}
}
т.е. без привязки к onload... Правда, по хорошему, нуна бы проверить parent.document.getElementById(\"result\") на не null...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36038932
SergASh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Жаль, что вы с самого начала не написали подробней как оно должно работать. Тогда бы я вас не путал этой кучей джаваскрипта.
При таком раскладе, на мой взгляд, от ифрейма с календарями и от хранения в дат в сеансе можно избавиться. Вы на клиентской стороне в состоянии получить пару дат из календаря не делая при этом постбека? Если не сможете со стандартным asp.net-ным календарём, то можно взять другой, их много фришных.
Дальше нужна будет скрытая HTML форма. Форма при помощи атрибута target может быть нацелена на обновление не всей страницы, а произвольного ифрейма. В эту форму можно будет положить пару hidden-полей и задать для них значения выбранных дат. После этого сделать сабмит формы. Тогда обработчик result.aspx сможет получить эти значения уже не из сеанса, а из запроса (Request.Form["dateFrom"] например). Ну и далее выдавать тот результат, который вам нужен. Результат приедет прямо в ифрейм.
Единственная проблема тут, которую придётся решать, это то, что форма в ASP.NET может быть только одна. Но это решаемо, ее можно создать динамически на клиентской стороне. С помощью jQuery так вообще несколько строчек.
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36038989
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergASh
Вы на клиентской стороне в состоянии получить пару дат из календаря не делая при этом постбека?
....
Дальше нужна будет скрытая HTML форма. Форма при помощи атрибута target может быть нацелена на обновление не всей страницы, а произвольного ифрейма. В эту форму можно будет положить пару hidden-полей и задать для них значения выбранных дат. После этого сделать сабмит формы. Тогда обработчик result.aspx сможет получить эти значения уже не из сеанса, а из запроса (Request.Form["dateFrom"] например).

/me думает: "Нам солнца не надо-нам партия светит!Нам хлеба не надо - работу давай!"
Код: plaintext
1.
parent.document.getElementById(\"result\").src="result.aspx?datebegin"+datebegin+"&dateend="+dateend;

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36039100
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
/me думает: "Нам солнца не надо-нам партия светит!Нам хлеба не надо - работу давай!"

Ме (т.е. Ex_Soft) правильно думает (только в первоисточнике слово "Партия" писалась с большой буквы). Я вот прочитал несколько раз весь топик (с начала и до конца). Кроме смешных штучек, типа "не все браузеры поддерживают" ничего не понял. А что они поддерживают? На онлоад обработчик не добавить ( любой страницы , хоть в ифрейме, хоть в Африке)?
Кстати, при чём здесь жквери - тоже не понятно. Пару строк для "ее можно создать динамически"?!!! Голый яваскрипт - одной строчкой делает (два криэйта и два аппендчилда - без проблем в одной строчке), только здесь этого не надо совсем.
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36039196
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/me думает: дело было вечером - делать было нечего...

_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36039252
ru_efim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду седеть разбираться.
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36039484
69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
69
Гость
Ex_Soft
SergASh
Не во всех браузерах

Огласите, пожалуйста, весь список...
SergASh
По спецификации его вообще быть не должно

Ссылочку на сие утверждение можно?
SergASh
Так что приходится делать периодический опрос. Надо смотреть в iframe.contentWindow.document и если он доступен пытаться понять по структуре пришел ли правильный ответ.

А заюзать onload parent'а нельзя?
_________________
"Helo, word!" - 17 errors 56 warnings


Млин, читай спцификацию. onload есть у body & frameset.
Ясный пень, что в iframe загружается body и событие обработать можно.
Но чье собыитие - фрейма?
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36040236
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых: не занимайтесь оверквотингом
Во-вторых: 69
onload есть у body & frameset

тынць , тынць
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36040298
69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
69
Гость
DOM-3?
Ну и какие же браузеры поддерживают его?
И ссылка на школу w3c?
По HTML4.1 только body & frame.
Если уважаешь школу Тынць-Пынць
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36040341
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
69
По HTML4.1 только body & frame.

/me думает: гм... Получается, что onload у того же img со времен царя Гороха - "...против всех законов физики..."?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36040511
69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
69
Гость
Разговор шел за спецификацию - там событий onload у img, script, iframe нет.
Реально - да есть.
...
Рейтинг: 0 / 0
Как дождаться загрузки IFRAME?
    #36040513
69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
69
Гость
...имеются в виду спецификации, которые 100 пудов поддерживаются веб-браузерами, то есть DOM-1 & HTML4.1
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Как дождаться загрузки IFRAME?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]