繁体   English   中英

在不同窗口的上下文中执行一个函数?

[英]Execute a function within the context of a different window?

假设顶部窗口中有一个函数。 例如:

function z() { alert(window.name); }

我们还要说这个文档中有一个iframe(同源)。

顶部窗口中的函数是否可以在另一个窗口的上下文中执行此函数,以便显示iframe的名称而不是顶部窗口?

换句话说,全局对象如何绑定到一个函数并且可以更改?

天真的尝试不起作用: https//jsfiddle.net/wos2o3gx/ (显示两个调用的顶部)。

全局对象如何绑定到函数并且可以更改?

函数的全局上下文在创建函数时确定,即使您将该函数作为另一个window上下文的属性也不会更改。 有动态的替代方法,比如用this替换window ,但由于this并不总是设置为全局对象(例如在严格模式下),我建议将window变量传递给你的函数:


演示片段( JSFiddle ):

function z (window) {
  window = window || self
  console.log(window.name)
}

window.name = 'w top'
z()

var iframe = document.getElementById('iframe')
iframe.contentWindow.name = 'w iframe'

z(iframe.contentWindow)
<iframe id="iframe" src="about:blank" name="w iframe">
</iframe>

您可以在示例中使用this代替window ,如下所示:

function z() {
  alert(this.name);
}

window.name = 'w top';
z();

var iframe = document.getElementById('iframe');
frame.contentWindow.name = 'w iframe';

frame.contentWindow.z = z;
frame.contentWindow.z();

全局对象如何绑定到函数?

通过关闭

它可以改变吗?

不需要。您需要在另一个窗口的上下文中创建一个新函数(例如,通过使用其evalFunction构造函数)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM