javascript - 关于更改运行 javascript 函数的上下文

标签 javascript scope call

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

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

我试过像这样在主函数中引用第三个窗口:

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

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

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

然后,我将在第二个窗口中创建一个按钮并制作一个onclick:

w.main;

这行不通...

是否有不同的方法(或更改此方法的方法)使函数意识到创建它的不同上下文的存在,因此当 future 时刻到来时,能够在其中运行?

我现在正在阅读有关根据我的目的调整 call() 的内容。这是否有意义,或者您会提出不同的建议?

最佳答案

假设窗口1打开窗口2,窗口2打开窗口3 并且您正在尝试从窗口 3 调用窗口 1 中的主要方法

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>

关于javascript - 关于更改运行 javascript 函数的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13978820/

相关文章:

javascript - 如何从非标准日期格式在 Javascript 中创建新的 Date()

java - 我无法将此 java 代码转换为 javascript

javascript - 获取JSON对象并读取数据

java - Spring Scope代理模式AspectJ?

java - Maven - JDBC jar 文件的正确范围是什么?

javascript - 继承时原型(prototype)方法中的“this”未按预期解析

java - 方法调用自身..递归?

java - 我很难从第一帧调用变量

javascript - IE8 和 localStorage 支持

javascript - 如何调用一个简单的javascript函数();当我单击 .swf 文件(FLASH)中的按钮时?