2009-09-22 2 views
4

Проблема: Необходимо получить дескриптор уже открытого всплывающего окна javascript (handle = window.open (...)) из его открывающего окна, несколько запросов позже после обновления окна родителя (родителя) и сброса параметров JavaScript ,Кто-нибудь знает лучший способ получить дескриптор всплывающего окна?

Например, родительское окно может иметь JavaScript следующим образом:

<script type="text/javascript"> 
     var popupHandle; 
     function openPopUp() { 
      popupHandle=window.open('http://www.google.ca', 'popupTest'); 
      popupHandle.focus(); 
      return popupHandle; 
     } 
     // To get handle, need to reopen popup with same name as original (popupTest). 
     function getPopUpHandle() { 
      return openPopUp(); 
     } 
     // If getting handle to close, open as small as possible and close so it’s not too noticeable. 
     function closePopUp() { 
      popupHandle=window.open('', 'popupTest', 'directories=no,location=no,menubar=no,status=no,resizable=no,scrollbars=no,titlebar=no,top=1,left=1,width=1,height=1'); 
      popupHandle.close(); 
     } 
</script> 

Если вы знаете, лучшее решение, пожалуйста, дайте мне знать.

Как я использую это в своем приложении: У меня есть список изображений, отображаемых на одной стороне экрана. С другой стороны у меня есть форма, которая позволяет мне отправлять информацию на основе изображения. Когда форма отправляется, она прикрепляет изображение, на которое делается ссылка.

Когда изображение нажимается, оно открывается всплывающим окном.

При отправке формы в всплывающем окне должно открыться следующее изображение в списке. Всплывающее окно могло быть закрыто пользователем.

+0

Не ответ, но всплывающие окна плохие, не используйте их :) Попробуйте решения, такие как лайтбокс, которые могут дать вашему пользователю лучший опыт. – marcgg

+0

Причина, по которой используется всплывающее окно (которое, как мне кажется, плохо), позволяет пользователю просматривать изображение в отдельном окне/мониторе при заполнении формы, используя ее в качестве ссылки. Возможно, изображения могут быть увеличены до полноэкранного просмотра, чтобы просмотреть детали. – CalvinTreg

+0

не будет отвечать вашим потребностям? http://www.huddletogether.com/projects/lightbox2/ – marcgg

ответ

1

Отъезд this site .. по существу, заново открыть окно или использовать фреймы, чтобы отслеживать ручку.

+0

Спасибо за ссылку, прочтите это раньше. Невозможно использовать фреймы. – CalvinTreg

+0

Похоже, повторное открытие окна оказалось самым быстрым решением. Благодарю. – CalvinTreg

1

Это немного kludge, но вы можете поместить скрипт в открытое окно, которое пытается вызвать функцию на своем window.opener, чтобы сообщить родительское окно о его существовании.

Итак, окно изображения дисплей будет иметь функцию, как

setInterval(function(){ 
    if(window.opener.registerChildWindow){ 
     window.opener.registerChildWindow(window); 
    } 
}), 100); 

Это попытка вызвать функцию registerChildWindow на родительское окно 10 раз в секунду, пока эта функция не существует, независимо от того, на какой странице родительское окно было включено. Я не совсем уверен, как получить дескриптор окна из существующего окна (прохождение window было догадкой), но это должно быть чем-то, с чем можно поиграть.