3

私がこれを行う場合:

var new_win = window.open();

親ウィンドウで使用できたすべての機能を子ウィンドウで使用できるようにするにはどうすればよいnew_winですか ( )。

はしたくない:

var fun1 = window.opener.fun1;
var fun2 = window.opener.fun2;
...
4

3 に答える 3

5

以下は、危険で、汚い、厄介な、M $ レベルのハックであることに注意してください。私はこれを十分に認識していますが、(理論的には)@Nealが望んでいることを行います。(投稿するのも少し怖いですし、反対票を完全に期待しています)

var i, w = window.opener;
for (i in w)
{
    if (w.hasOwnProperty(i) && !window.hasOwnProperty(i) && typeof w[i] === 'function')
    {
        window[i] = w[i];
    }
}

スコープの問題を考慮して、 を使用する必要があると判断しました.bindFunction.bind の MDN エントリには、特定のブラウザーに必要なshim があります。

.bindを使用する前に、プロパティが関数かどうかをコードで確認する必要があることに注意してください。これをチェックと一緒に実行しましたhasOwnPropertyが、関数だけでなく値も転送したい場合は、独自のifステートメント内でこれを実行することをお勧めします。

var i, w = window.opener;
for (i in w)
{
    if (w.hasOwnProperty(i) && !window.hasOwnProperty(i) && typeof w[i] === 'function')
    {
        window[i] = w[i].bind(window);
    }
}
于 2011-11-01T14:46:42.207 に答える
1

まず、名前空間を作成し(関数の衝突を回避するのに役立ちます)、次にポップアップウィンドウでそれを参照します。

親ウィンドウ:

MyNameSpace = {
      // put functions, classes or whatever you want in here.
};

ポップアップウィンドウで:

MyNameSpace = window.opener.MyNameSpace;

あなたが求めているものに関する潜在的な唯一の問題は、あなたが呼び出す関数がウィンドウオブジェクトを参照しようとしているかどうかです。ウィンドウを操作する関数にウィンドウオブジェクトを渡します。

例えば

function (arg1, arg2, argn, windowHandle) {
      windowHandle = windowHandle || self;

      // do some stuff.

}
于 2011-11-01T14:54:46.660 に答える
0

関数の新しいインスタンスを作成し、関数名とオプションの argN を次のように渡すことができます。

var parentFunction = new Function("name", "args", "return (window.opener != null) ?  opener.window[name](args) : false");

parentFunction('notification','waring, red, 2');
于 2011-11-01T17:11:13.667 に答える