1

我解决了我遇到的一个问题,意识到如果你在某个上下文中定义一个 javascript 函数,你就不能调用它来在不同的上下文中运行。现在,我一直在探索实现这一目标的方法。

我的目标是:我有三个窗口:第一个是主窗口,我的函数是在其中创建的。第二个是使用window.open. 第二个窗口有一个按钮可以打开第三个也是最后一个窗口,打开后,第三个窗口应该运行与第一个窗口中定义的相同的功能。

我试图在主函数中引用第三个窗口,如下所示:

(假设我的window.open变量的名称是w

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

所以我希望它能给 main 函数一个提示,W 的存在,我稍后会打开的窗口。

然后,从第二个窗口中,我将创建一个按钮并制作一个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 中显示“测试”

窗口1.html:

<html>
<head>

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

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

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

窗口2.html:

<html>
<head>

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

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

窗口3.html:

<html>
<head>

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

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