This link(archived version)介绍如何从脚本代码注入到一个iframe:注入的JavaScript函数到iframe
function injectJS() {
var iFrameHead = window.frames["myiframe"].document.getElementsByTagName("head")[0];
var myscript = document.createElement('script');
myscript.type = 'text/javascript';
myscript.src = 'myscript.js'; // replace this with your SCRIPT
iFrameHead.appendChild(myscript);
}
这是确定的,但如果我要插入一个函数对象到iframe 什么并让它在iframe的上下文中执行?假设我有:
function foo() {
console.log ("Look at me, executed inside an iframe!", window);
}
我想在iframe中插入foo代码? (函数foo可能是一些动态加载,我不能只把它包装在引号)
我天真的尝试:
var scriptFooString = "<script>" + foo.toString() + "</script>"
进去函数的代码,但
- 我不知道如何将它插入iframe HEAD(也许用jQuery?)
- 我不知道它是否是正确的方式
- 我不知道,如果函数比这样更复杂的时候会发生什么
- 我不知道有什么用双和单引号
scriptFooString
任何暗示会发生什么?
好了,但如果我从父窗口'帧执行功能[0]。 window.foo();',它会在父窗口上下文中执行。将它插入头部会让它在iframe上下文中执行,我错了吗? (请参阅http://jsfiddle.net/7rEXT/) – janesconference 2013-04-24 14:38:09
问题不在于语境,而在于范围。当你制作函数foo时,你可以在我认为的当前范围内进行设置,所以窗口就是父窗口,而不是框架等等。你仍然需要在内部使用'myFrame.contentWindow'或'frames [0] .window'访问正确范围的函数。如果您需要注入脚本标记,则可以通过DOM追加它。 – EJTH 2013-04-25 06:55:00
我已更新我的答案,以更好地匹配您的查询。虽然我必须说,如果你需要做这样的事情,很可能是你过于复杂,而且你做错了,或者做得更聪明。 – EJTH 2013-04-25 07:13:45