Подтвердить что ты не робот

Установите функцию обратного вызова в новое окно в javascript

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

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

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

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

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

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

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

4b9b3361

Ответ 1

Обновлено для комментариев: Если вы открываете окно через 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; };

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

Ответ 2

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

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