私がこれを行う場合:
var new_win = window.open();
親ウィンドウで使用できたすべての機能を子ウィンドウで使用できるようにするにはどうすればよいnew_win
ですか ( )。
私はしたくない:
var fun1 = window.opener.fun1;
var fun2 = window.opener.fun2;
...
私がこれを行う場合:
var new_win = window.open();
親ウィンドウで使用できたすべての機能を子ウィンドウで使用できるようにするにはどうすればよいnew_win
ですか ( )。
私はしたくない:
var fun1 = window.opener.fun1;
var fun2 = window.opener.fun2;
...
以下は、危険で、汚い、厄介な、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];
}
}
スコープの問題を考慮して、 を使用する必要があると判断しました.bind
。Function.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);
}
}
まず、名前空間を作成し(関数の衝突を回避するのに役立ちます)、次にポップアップウィンドウでそれを参照します。
親ウィンドウ:
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.
}
関数の新しいインスタンスを作成し、関数名とオプションの argN を次のように渡すことができます。
var parentFunction = new Function("name", "args", "return (window.opener != null) ? opener.window[name](args) : false");
parentFunction('notification','waring, red, 2');