JQuery - как установить обратные вызовы для родительской страницы во всплывающем окне - PullRequest
0 голосов
/ 20 мая 2011

Когда я открываю всплывающее окно, я хочу иметь возможность установить несколько обратных вызовов, которые может вызвать всплывающее окно. В общем, у меня было бы две страницы с таким кодом:

*****popup.html*******
var callBack;
function OnSaveClick()
{
  if (callBack)
     callBack();
}

**********************************************
********popupOpener.html*************
function callBackHandler()
{
   //some code here
}
function OpenPopup()
{
   var p = window.open("popup.html");
   p.callBack = callBackHandler;
   return false;
}

Проблема в том, что var callBack сбрасывается при загрузке DOM файла popup.html и не загружается до тех пор, пока OpenPopup () в средстве открытия не завершится. Таким образом, следующая лучшая вещь должна была бы установить callBack в событии ready popup.html. Но я хочу иметь возможность прикрепить обработчик события к готовому событию popup.html в popupOpener.html. Таким образом, функция OpenPopup теперь будет выглядеть примерно так:

var p;
function OpenPopup()
{
  p = window.open("popup.html");
  $(p).ready(hookCallBack)      //doesn't work
  //or $(p.document).ready(hookCallBack)  //doesn't work
  return false;
}
function hookCallBack()
{
  p.callBack = callBackHandler;
}

Но hookCallBack () выполняется сразу после $ (p) .ready (hookCallBack), а НЕ, когда готов DOM файла popup.html. Есть ли другой способ сделать это?

Ответы [ 3 ]

2 голосов
/ 20 мая 2011

См. Мой вопрос: Получить DOM-элементы всплывающего окна для манипулирования jQuery , чтобы получить ответ о том, как управлять всплывающим окном после его загрузки

Так что вы можете сделать что-то вроде ответа @ MattBall:

popupOpener.html:

var opener = {

        popup: null, 

        newPopup: function(windowsname){
            this.popup = window.open(windowsname);
            var self = this;

            this.popup.onload = function ()
            {
              var doc = this.document,
                  script = doc.createElement('script');
                  script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js';
                  script.onload = function ()
                  {
                      function setup()
                      {
                          //something to do on the popup
                      }

                      script = doc.createElement('script');
                      script.textContent = "(" + setup.toString() + ")();";
                      doc.body.appendChild(script);
                  };

                  doc.head.appendChild(script);
            };
        },

        some_function: function(){
             //calling it here:
             this.newPopup('popup.html');
        }
    }

Итак, чтобы загрузить всплывающее окно при загрузке страницы:

window.onload = function(){
    opener.some_function();
};

Вот демоверсия: http://jsfiddle.net/EJasA/

0 голосов
/ 12 августа 2014
if(callback_function) {
   eval('window.opener.' + callbak_function)(name, age, address);
}

функция обратного вызова - строка

0 голосов
/ 20 мая 2011

в вашей всплывающей странице обратитесь к «открывателю», чтобы получить страницу, которая создала всплывающее окно:

, например:

function OnSaveClick()
{
  if (callBack) //just have callback as a boolean field
      opener.top.frameFocus.callbackfunc();
}

см. http://www.webreference.com/js/tutorial1/opener.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...