2010-05-09 3 views
21

Есть ли простой способ установить функцию «обратного вызова» в новое окно, которое открывается в javascript? Я хотел бы запустить функцию родителя из нового окна, но я хочу, чтобы родитель мог установить имя этой конкретной функции (чтобы он не был жестко запрограммирован на новой странице Windows).Установите функцию обратного вызова в новое окно в javascript

Например, в родителю у меня есть:

function DoSomething { alert('Something'); } 
... 
<input type="button" onClick="OpenNewWindow(linktonewwindow,DoSomething);" /> 

И в дочернем окне Я хочу:

<input type="button" onClick="RunCallbackFunction();" /> 

Вопрос заключается в том, чтобы создать этот OpenNewWindow и RunCallbackFunction функции. Хотя я хочу отправить имя функции в качестве параметра запроса в новое окно (где скрипт на стороне сервера генерирует соответствующие вызовы функций в HTML-файле сгенерированного дочернего элемента), но я думал, есть ли другой или лучший способ выполнить это, возможно, что-то, что даже не требует вмешательства на стороне сервера.

Чистые javascript, серверные решения и jQuery (или другие фреймворки) приветствуются.

ответ

46

Обновлено для комментариев: Если вы открываете окно, то на странице ребенка вы можете установить функцию в ребенка, чтобы быть просто ссылка указывает на материнскую функцию, так что есть это на странице ребенка с помощью window.open() :

var RunCallbackFunction = function() { }; //reference holder only 

Затем в родителе (нож), установите эту функцию, если это окно ребенка нагрузка, как это:

//random function you want to call 
function myFunc() { alert("I'm a function in the parent window"); } 

//to actually open the window.. 
var win = window.open("window.html"); 
win.onload = function() { win.RunCallbackFunction = myFunc; }; 

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

+0

Я не хочу жестко кодировать имя функции в дочернем окне. Это было требованием. Родительское окно может иметь несколько мест, где оно открывает одно и то же дочернее окно, но с различными функциями обратного вызова. – SztupY

+1

@SztupY - Тогда просто измените код, чтобы сделать ту же ссылку в дочернем окне, в один момент я отрегулирую ответ. –

+0

Но если родительский объект открывает несколько окон, как каждый знает, какую функцию вызывать? Все они будут вызывать последнюю установленную функцию. – SztupY

-2
var newWindow = window.open(window.location.origin); 

newWindow.onload = function() { 
    $(newWindow.document.body).addClass('new-window-body-class'); 
}; 
+4

Я не совсем понимаю, как это отвечает на вопрос или даже помогает. – Chayemor