Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Помогите по JavaScript: окончание загрузки window.opener
цитата
18/01/14 в 18:05
 alexxxus
Здравствуйте.

Помогите, пожалуйста.

Скрипт работает в child-окне.
Нужно из него вызвать window.opener для родителя и по окончании загрузки
закрыть child-окно.

Вопрос: как определить, что window.opener закончил загрузку?

window.opener.focus();

window.opener.location.href = url;

// далее дождаться окончания загрузки, и
// по завершении window.close();


Спасибо.
цитата
21/01/14 в 14:29
 Yacc
Код:
var parent = window.opener;
parent.focus();
parent.location.href = 'https://www.master-x.com';
var i = setInterval(function() {
   try {
      parent.document;
   }
   catch (e) {
      clearInterval(i);
      window.close();
   }
}, 100);
цитата
21/01/14 в 16:26
 alexxxus
Спасибо, работает, но только если по ссылке загружаются
другие хосты. 'https://www.master-x.com' или 'http://www.google.com' работает, а вот загрузить страничку со своего же хоста и закрыться не получается. Страничка загружается, но window.close() не срабатывает.
цитата
21/01/14 в 18:06
 Yacc
Так и было задумано. icon_smile.gif

Более менее универсально как-то так.
Код:
var url = 'http://google.com',
   parent = window.opener,
   intervalID = setInterval(function() {
      try {
         if (parent.document.URL === url) {
            die(intervalID);
         }
      }
      catch (e) {
         die(intervalID);
      }
   }, 100),
   die = function (intervalID) {
      clearInterval(intervalID);
      window.close();   
   };
parent.focus();
parent.location.href = url;


Если же нужно более точно контролировать процесс загрузки, то можно в коде страницы разместить какие-то маркеры и отслеживать их появление в dom. Стоит только помнить что окно закрывается скорее по событию document.DOMContentLoaded, нежели по document.load.
цитата
21/01/14 в 19:05
 alexxxus
Спасибо. Я на трех форумах просил помочь, никто не справился)
Решение с отслеживанием маркера при загрузке будет для меня идеальным.
Пожалуйста, покажите как такое делается .
Спасибо!
(рейтинг по максимуму за 2 поста 4+4 добавил)
цитата
22/01/14 в 16:16
 Yacc
Предположим что нужно закрывать окно по окончании загрузки фрейма.

test.html
Код:
<iframe src="//www.master-x.com" onload="window.iframeLoaded = true"/>


child.html
Код:
<script>
   var parent = window.opener,
      intervalID = setInterval(function() {
         if (typeof parent.iframeLoaded !== 'undefined' && parent.iframeLoaded === true) {
            clearInterval(intervalID);
            window.close();
         }
      }, 100);
   parent.focus();
   parent.location.href = 'test.html';
</script>


Как-то так. Не зная что конкретно ты делаешь, сложно советовать что-то конкретное.
цитата
22/01/14 в 16:54
 alexxxus
Огромное спасибо за труд и за потраченное время.
Без Вас я бы не справился, тем более, что на других форумах (в том числе забугорном) никто так и не помог.


Эта страница в полной версии