web-dev-qa-db-ja.com

JavaScriptでコールバック関数を新しいウィンドウに設定する

JavaScriptで開かれる新しいウィンドウに「コールバック」関数を設定する簡単な方法はありますか?新しいウィンドウから親の関数を実行したいのですが、親がこの特定の関数の名前を設定できるようにしたいので、新しいウィンドウページでハードコードしないでください。

たとえば、私は親で:

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

そして、私がしたい子ウィンドウで:

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

問題は、このOpenNewWindow関数とRunCallbackFunction関数を作成する方法です。関数の名前をクエリパラメータとして新しいウィンドウ(サーバー側のスクリプトが生成された子のHTMLで適切な関数呼び出しを生成する場所)に送信することを考えましたが、別の方法、またはより良い方法があるかどうかを考えていましたこれは、サーバー側でのいじりさえも必要としないものかもしれません。

純粋なjavascript、サーバー側のソリューション、jQuery(またはその他のフレームワーク)はすべて歓迎されます。

23
SztupY

コメントが更新されました: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; };

これにより、親の関数がその子のターゲットになるように割り当てられます。必要に応じて、各子を異なる関数にポイントできます。これらはすべて独立しています。

55
Nick Craver