28

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

たとえば、私が持っている親では:

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

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

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

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

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

4

2 に答える 2

56

コメントの更新:子ページで ウィンドウを開いている場合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; };

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

于 2010-05-09T12:07:37.727 に答える
-3
var newWindow = window.open(window.location.origin);

newWindow.onload = function() {
    $(newWindow.document.body).addClass('new-window-body-class');
};
于 2014-12-23T10:23:48.567 に答える