<script type="text/javascript">window.open = function() { return window; }</script>
<html><head><title></title>
<script type="text/javascript">
window.open("http://www.google.ru");
</script></head><body></body></html>
потомки в java script
У меня есть главное окно. С него можно пооткрывать много других поп-ап окон. Как мне сделать так, чтобы при закрытиии окна родителя (главного окна) закрывались все окна потомки?
при закрытии окна (покидании страницы и т.п.) вызывается onunload, если вообще вызывается :D
Цитата:
Originally posted by Shiizoo
Закидывать в родительском окне ссылки на объекты дочерних окон (эт кторые на window.open возвращаются) в массив, а при закрытии его (родительского окна) перебирать этот массив и закрывать все окна связанные с перебираемыми значениями.
при закрытии окна (покидании страницы и т.п.) вызывается onunload, если вообще вызывается :D
Закидывать в родительском окне ссылки на объекты дочерних окон (эт кторые на window.open возвращаются) в массив, а при закрытии его (родительского окна) перебирать этот массив и закрывать все окна связанные с перебираемыми значениями.
при закрытии окна (покидании страницы и т.п.) вызывается onunload, если вообще вызывается :D
Я забыл предупредить, что таким вариантом я уже пользуюсь)
Но хотелось бы без закидывания в массив. Может как-то пролистывать всех потомков окна, типа как в DOM.
=) Может я ошибаюсь, но насколько я помню объект window не входит в DOM. Потому как, DOM - Document object model, а document в свою очередь - дочерний элемент window. Это DOM LVL 0, то есть недокументированный стандарт. Юзай массив, не вижу в этом никаких минусов.
Цитата:
Originally posted by Shiizoo
=) Может я ошибаюсь, но насколько я помню объект window не входит в DOM. Потому как, DOM - Document object model, а document в свою очередь - дочерний элемент window. Это DOM LVL 0, то есть недокументированный стандарт. Юзай массив, не вижу в этом никаких минусов.
=) Может я ошибаюсь, но насколько я помню объект window не входит в DOM. Потому как, DOM - Document object model, а document в свою очередь - дочерний элемент window. Это DOM LVL 0, то есть недокументированный стандарт. Юзай массив, не вижу в этом никаких минусов.
На сколько я помню, никаких сомнений, что window - это не часть DOM, я не выдвегал)
Допустим, я размещу страницу на шаровом хосте, на котором до фига баннеров и поп-апов. Там поп-ап окна я не смогу кинуть в массив. Вот те и минус.
Вот я как раз и не знаю сколько и какие окна я буду открывать во время работы страницы.
Ой весело бы было;) Must be! Как найдешь решение, обязательно чиркни сюда=)
..Гм, или я не в ту сторону подумал. :? Как вариант, можно было бы попробывать подменить open() в window прототипе, но.. Я не знаю как вызывать из подмененного метода оригинальный и это необходимо сделать до того, как эти самые window'ы откроются;)
Думаю не такие лоси работают с халявными хостингами и такие моменты они предусмотрели... Можно было бы и вовсе при первой же возможности обнулить window.open метод, то бишь сделаеть его null'ом. А потом вернуть ему функциональность, но уже после нежелательных включений. Ой не знаю, не знаю... :D
Код:
Но, больно просто:D Думаю несработает;)
Код:
<script type="text/javascript">
window.open = function(param1,param2...) {
if (
typeof window.chldWins == 'undefined' ||
window.chldWins === null ||
!(window.chldWins instanceof Array)
) window.chldWins = [];
window.chldWins[window.chldWins.length] = window.open(param1,param2...);
}
</script>
<html><head><title></title>
<script type="text/javascript">
window.open("http://safgasgasga");
</script></head><body></body></html>
window.open = function(param1,param2...) {
if (
typeof window.chldWins == 'undefined' ||
window.chldWins === null ||
!(window.chldWins instanceof Array)
) window.chldWins = [];
window.chldWins[window.chldWins.length] = window.open(param1,param2...);
}
</script>
<html><head><title></title>
<script type="text/javascript">
window.open("http://safgasgasga");
</script></head><body></body></html>
научить поддельный open вызывать настоящий window.open.
Код:
<script type="text/javascript">
window.old_open = window.open;
window.open = function(parm1,parm2,parm3,parm4) {
if (
typeof window.chldWins == 'undefined' ||
window.chldWins === null ||
!(window.chldWins instanceof Array)
) window.chldWins = [];
window.chldWins[window.chldWins.length] =
(typeof parm1 == 'undefined') ? window.old_open() :
(typeof parm2 == 'undefined') ? window.old_open(parm1) :
(typeof parm3 == 'undefined') ? window.old_open(parm1,parm2) :
(typeof parm4 == 'undefined') ? window.old_open(parm1,parm2,parm3) :
window.old_open(parm1,parm2,parm3,parm4);
}
</script>
<html><head><title></title>
<script type="text/javascript">
window.open("http://www.google.ru");
window.open("http://www.ya.ru");
alert('This window have ' + window.chldWins.length + ' child windows');
</script></head><body></body></html>
window.old_open = window.open;
window.open = function(parm1,parm2,parm3,parm4) {
if (
typeof window.chldWins == 'undefined' ||
window.chldWins === null ||
!(window.chldWins instanceof Array)
) window.chldWins = [];
window.chldWins[window.chldWins.length] =
(typeof parm1 == 'undefined') ? window.old_open() :
(typeof parm2 == 'undefined') ? window.old_open(parm1) :
(typeof parm3 == 'undefined') ? window.old_open(parm1,parm2) :
(typeof parm4 == 'undefined') ? window.old_open(parm1,parm2,parm3) :
window.old_open(parm1,parm2,parm3,parm4);
}
</script>
<html><head><title></title>
<script type="text/javascript">
window.open("http://www.google.ru");
window.open("http://www.ya.ru");
alert('This window have ' + window.chldWins.length + ' child windows');
</script></head><body></body></html>
Попробуй так. Оказывается подменить метод проще, чем я думал. Ну раз все так просто, значь халявные хостинги такие конструкции фильтруют, хотя если все это заэнкодить или еще что-нить такое извращенское намутить, то может и получиться. DUNNO!