[英]Copying a function object from one window to another
是否可以将 function(或任何 object)从一个 window 上下文复制到另一个 Z9E13B69D1D25DAACAAAF771?
假设我有一个父window ,其中有一个框架。 该框架定义了一个 function foo()
,我想将其复制到外部 window。 (这样做的一个原因是foo()
在框架文档导航到不同的 URL 时可用。)
我知道我可以通过做轻松地在父级中创建对foo()
的引用
function foo() { ... }
parent.foo = foo;
但是使用这种方法foo()
仍然存在于框架文档中,并且如果框架被卸载,父级将无法使用。
我知道我还可以使用 Function 构造函数在父级中创建一个新的 function :
parent.foo = new parent.Function(" ... ");
但是,这需要我将 function 作为 JS 字符串。
DOM 支持通过importNode()
将节点从一个文档移动到另一个文档。 Javascript 有类似的功能吗?
nitko 的解决方案似乎是正确的,但需要做更多的工作。 这个 function 似乎适用于 FF2、FF3、IE7 和 Chrome:
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);
}
返回的 function 可用于所需的 window。 就像是:
parent.foo = importFunction(foo, parent);
您总是可以获得给定 function 的代码,调用它的toString()
方法:
parent.foo = new parent.Function( originalFunction.toString() );
虽然我不确定它在每个浏览器中都可用,但我想我已经看到它在主流浏览器和现代版本中工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.