假设顶部窗口中有一个功能。例如:
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(使用前将#替换为@)