1

特定のコンテキストでjavascript関数を定義すると、別のコンテキストで実行するように呼び出すことができないことに気づき、私が抱えていた問題を解決しました。今、私はそれを達成する方法を模索してきました。

私の目標は次のとおりです。3つのウィンドウがあります。最初のウィンドウは、関数が作成されたメインウィンドウです。2つ目は、を使用して新しく開いたウィンドウwindow.openです。この2番目のウィンドウには、3番目と最後のウィンドウを開くためのボタンがあり、開いた後、その3番目のウィンドウは最初のウィンドウで定義されたのと同じ関数を実行する必要があります。

私は次のようにメイン関数でこの3番目のウィンドウを参照しようとしました:

window.open(私の変数の名前がw)であると仮定します

var w;
function main() {
    console.log(w);
    ...rest of the code....
}

それで、後で開くウィンドウであるWの存在の主な機能にヒントが与えられることを期待していました。

次に、2番目のウィンドウからボタンを作成し、onclick:を作成します。

w.main;

それはうまくいきません...

関数が作成された別のコンテキストの存在を認識し、将来その瞬間が来たときにその中で実行できるようにするための別の方法(またはこれを変更する方法)はありますか?

私は今call()、自分の目的に適応することについて読んでいます。それは理にかなっていますか、それとも別の方法を提案しますか?

4

1 に答える 1

3

ウィンドウ1がウィンドウ2を開き、ウィンドウ2がウィンドウ3を開き、ウィンドウ3からウィンドウ1のmainメソッドを呼び出そうとしていると仮定します。

window.opener.opener.main();

ウィンドウ2で開くときにウィンドウ1のwをウィンドウ3の参照に設定します。

window.opener.w = window.open();

わかりました、これをテストしました。ウィンドウ3が開いた後、ウィンドウ1に「テスト」を表示するダイアログが開きます。

window1.html:

<html>
<head>

    <script type="text/javascript">
        var child = window.open("window2.html", "window2");

        function test() {
            alert("test");
        }
    </script>

</head>
<body>
</body>
</html>

window2.html:

<html>
<head>

    <script type="text/javascript">
        var child = window.open("window3.html", "window3");
    </script>

</head>
<body>
</body>
</html>

window3.html:

<html>
<head>

    <script type="text/javascript">
        window.opener.opener.test();
    </script>

</head>
<body>
</body>
</html>
于 2012-12-20T19:14:13.993 に答える