是否可以在Javascript中将函数(或任何对象)从一个窗口上下文复制到另一个窗口上下文?
假设我有一个带有框架的父窗口。 框架定义了一个函数foo()
,我想复制到外部窗口。 (这样做的一个原因是当框架文档导航到不同的URL时foo()
可用。)
我知道我可以通过
轻松地在父中为foo()
创建参考
function foo() { ... }
parent.foo = foo;
但是使用此方法foo()
仍然存在于框架文档中,并且父 框将无法使用框架卸货。
我知道我也可以使用Function构造函数在 parent 中创建一个新函数:
parent.foo = new parent.Function(" ... ");
然而,这要求我将我的功能作为JS字符串。
DOM支持通过importNode()
将节点从一个文档移动到另一个文档。 Javascript是否有类似的功能?
答案 0 :(得分:1)
function importFunction(fn, win) {
var code = fn.toString();
var params = code.match(/\(([^)]*)\)/);
if (typeof(params[1]) !== 'undefined') {
params = params[1].split(/\s*,\s*/);
} else {
params = null;
}
code = code.replace(/^[^{]*{/, '');
code = code.replace(/}$/, '');
if (params) {
return new win.Function(params, code);
}
return new win.Function(code);
}
返回的函数可以在所需的窗口中使用。类似的东西:
parent.foo = importFunction(foo, parent);
答案 1 :(得分:-1)
您始终可以获取给定函数的代码,调用它的toString()
方法:
parent.foo = new parent.Function( originalFunction.toString() );
虽然我不知道它可以在每个浏览器中使用,但我认为我已经看到它在主流浏览器,现代版本中工作。