首先,只有当您的框架和显示它的页面位于同一域内时,您才能完成此操作(由于跨域规则)
其次可以直接通过JS操作frame的dom和window对象:
frames[0].window.foo = function(){
console.log ("Look at me, executed inside an iframe!", window);
}
要从 DOMElement 对象获取框架,您可以使用:
var myFrame = document.getElementById('myFrame');
myFrame.contentWindow.foo = function(){
console.log ("Look at me, executed inside an iframe!");
}
请注意,foo 中的范围没有更改,因此 window 仍然是 foo 内的父窗口等。
如果您想注入一些需要在另一个框架的上下文中运行的代码,您可以注入一个脚本标签,或对其进行评估:
frames[0].window.eval('function foo(){ console.log("Im in a frame",window); }');
尽管普遍的共识是永远不要使用 eval,但我认为如果您确实需要完成此任务,它是比 DOM 注入更好的选择。
因此,根据您的具体情况,您可以执行以下操作:
frames[0].window.eval(foo.toString());