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

HTML+CSS+JavaScript

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

 

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

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

тема: вызвать функцию в другом окне
 
 автор: sl1p   (14.10.2008 в 04:07)   письмо автору
 
 

собсно имеем 2 окна.
нужно както из одного окна вызвать функцию которая имеется только в том окне в котором нужно вызвать.Тоесть текущее окно ничего не знает.

Как реализовать?

  Ответить  
 
 автор: PAT   (14.10.2008 в 11:21)   письмо автору
 
   для: sl1p   (14.10.2008 в 04:07)
 

Здесь важен вопрос - каким именно образом ИМЕЕТЕ два окна.

Если соблюдаются одновременно ДВА условия:
1. одно окно (второе, дочернее) открыто СКРИПТОМ из другого окна (первого, родительского);

2. файл, открытый во втором (дочернем) окне, с того же домена, что и файл из первого (родительского) окна.
то всё решается элементарно - файлы двух этих окон вполне могут читать содержимое друг друга и управлять действиями друг друга.


Если хоть какое-то из двух этих условий не выполняется, то проблема не решается вовсе.

  Ответить  
 
 автор: sl1p   (14.10.2008 в 16:35)   письмо автору
 
   для: PAT   (14.10.2008 в 11:21)
 

Да всё именно так, второе окно как поп-ап.

  Ответить  
 
 автор: PAT   (14.10.2008 в 18:40)   письмо автору
 
   для: sl1p   (14.10.2008 в 16:35)
 

Ну так и реализовывайте.

Положим, в дочернем окне вы открываете файл myfile.html, в котором в блоке <script></script> прописана какая-то функция под названием myFunc ().

В родительском файле новое окно при его открытии необходимо сохранить в виде глобальной переменной. Т.е. не просто
window.open ('myfile.htm', ...);
а именно
NW = window.open ('myfile.htm', ...);

Затем в нужном вам месте в родительском окне прописываете NW.myFunc () и функция myFunc () дочернего окна исполнится.
Желательно, конечно, ещё и убедиться, что к моменту обращения дочернее окно юзером не закрыто.
Поэтому полностью правильной будет запись
if (!NW.closed) NW.myFunc ();

  Ответить  
 
 автор: sl1p   (14.10.2008 в 21:15)   письмо автору
 
   для: PAT   (14.10.2008 в 18:40)
 

мне нужно наоборот, из поп-апа вызвать родителя..

  Ответить  
 
 автор: PAT   (15.10.2008 в 02:32)   письмо автору
 
   для: sl1p   (14.10.2008 в 21:15)
 

opener.myFunc ();

  Ответить  
 
 автор: sl1p   (15.10.2008 в 04:01)   письмо автору
 
   для: PAT   (15.10.2008 в 02:32)
 

пасибки.

  Ответить  
 
 автор: sl1p   (15.10.2008 в 05:33)   письмо автору
 
   для: PAT   (15.10.2008 в 02:32)
 

хм а что это может быть?
var lsrc=(id==null)?"info.php?"+m01():"info.php?id="+id+"&"+m01();
info_w=window.open(lsrc,"info","toolbar=0,location=1,status=1,scrollbars=0,resize=0,width=791,height=410");info_w.focus();info_w.moveTo(0,0);

ИЕ 6 ругается говорит:
"info_w" - есть null или не является объектом.

  Ответить  
 
 автор: PAT   (15.10.2008 в 05:59)   письмо автору
 
   для: sl1p   (15.10.2008 в 05:33)
 

info_w=window.open(lsrc,"info","toolbar=0,location=1,status=1,scrollbars=0,resize=0,width=791,height=410");
info_w.focus();
info_w.moveTo(0,0);

Три этих оператора в коде выполняются один за одним - практически мгновенно.
Но фактически первая операция - длительный процесс... пока браузер окно откроет, пока файл туда загрузится.

Здесь после открытия окна надо сделать паузу. Приблизительно так:
info_w = window.open (lsrc, "info", "toolbar=0,location=1,status=1,scrollbars=0,resize=0,width=791,height=410");
setTimeout (myFunc, 100);
...
function myFunc ()
{
if (!self.info_w) {setTimeout (myFunc, 100); return} //вдруг ещё не открылось
if (!info_w.closed)
   {
   info_w.focus ();
   info_w.moveTo (0,0);
   }
else alert ('Не знаю, что делать!!! Окно закрыли!');
}

  Ответить  
 
 автор: sl1p   (15.10.2008 в 17:12)   письмо автору
 
   для: PAT   (15.10.2008 в 05:59)
 

теперь ИЕ вообще не хочет открывать ничего.. и никаких ошибок не пишет.

function a01(id){var lsrc=(id==null)?"info.php?"+m01():"info.php?id="+id+"&"+m01();
info_w=window.open(lsrc,"info","toolbar=0,location=1,status=1,scrollbars=0,resize=0,width=791,height=410");
setTimeout('a01s()',100);
}
function a01s(){
if (!self.info_w) {setTimeout ('a01s()', 100); return}
else if (!info_w.closed)
   {
   info_w.moveTo(0,0);
   info_w.focus();
   }    
}

  Ответить  
 
 автор: sl1p   (17.10.2008 в 00:40)   письмо автору
 
   для: sl1p   (15.10.2008 в 17:12)
 

куку ы

  Ответить  
 
 автор: PAT   (17.10.2008 в 00:50)   письмо автору
 
   для: sl1p   (17.10.2008 в 00:40)
 

Не знаю.
У меня всё открывается, всё двигается и всё фокусируется.


Когда вам в примере пишут:
setTimeout (имя_функции, 100)
а вы переделываете на своё
setTimeout (имя_функции+скобки_да_ещё_всё_это_в_кавычках, 100)
, вы полагаете, что поступаете мудро? :-)

  Ответить  
 
 автор: sl1p   (17.10.2008 в 09:58)   письмо автору
 
   для: PAT   (17.10.2008 в 00:50)
 

сделал как положено:)

всё такое же..(
уже даже стало интересно что такое..
везде работает а ИЕ вообще никак не реагирует...:\

  Ответить  
Rambler's Top100
вверх

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