繁体   English   中英

将 function object 从一个 window 复制到另一个

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM