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

2024-05-04

假设顶部窗口中有一个功能。例如:

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

我们还假设该文档中有一个 iframe(同源)。

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

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

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


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

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


演示片段(JSFiddle https://jsfiddle.net/wos2o3gx/1/):

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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在不同窗口的上下文中执行函数? 的相关文章

随机推荐