我解决了我遇到的一个问题,意识到如果您在特定上下文中定义了一个 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/