Реклама на сайте Advertise with us

Помогите по JavaScript: окончание загрузки window.opener

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 01.10.04
Сообщения: 456
Рейтинг: 149

Ссылка на сообщениеДобавлено: 18/01/14 в 18:05       Ответить с цитатойцитата 

Здравствуйте.

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

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

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

window.opener.focus();

window.opener.location.href = url;

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


Спасибо.

1
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 21/01/14 в 14:29       Ответить с цитатойцитата 

Код:
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);

3
 



С нами с 01.10.04
Сообщения: 456
Рейтинг: 149

Ссылка на сообщениеДобавлено: 21/01/14 в 16:26       Ответить с цитатойцитата 

Спасибо, работает, но только если по ссылке загружаются
другие хосты. 'https://www.master-x.com' или 'http://www.google.com' работает, а вот загрузить страничку со своего же хоста и закрыться не получается. Страничка загружается, но window.close() не срабатывает.

1
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 21/01/14 в 18:06       Ответить с цитатойцитата 

Так и было задумано. 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.

3
 



С нами с 01.10.04
Сообщения: 456
Рейтинг: 149

Ссылка на сообщениеДобавлено: 21/01/14 в 19:05       Ответить с цитатойцитата 

Спасибо. Я на трех форумах просил помочь, никто не справился)
Решение с отслеживанием маркера при загрузке будет для меня идеальным.
Пожалуйста, покажите как такое делается .
Спасибо!
(рейтинг по максимуму за 2 поста 4+4 добавил)

1
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 22/01/14 в 16:16       Ответить с цитатойцитата 

Предположим что нужно закрывать окно по окончании загрузки фрейма.

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>


Как-то так. Не зная что конкретно ты делаешь, сложно советовать что-то конкретное.

4
 



С нами с 01.10.04
Сообщения: 456
Рейтинг: 149

Ссылка на сообщениеДобавлено: 22/01/14 в 16:54       Ответить с цитатойцитата 

Огромное спасибо за труд и за потраченное время.
Без Вас я бы не справился, тем более, что на других форумах (в том числе забугорном) никто так и не помог.

1
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »