4

语境:

我正在构建一个实时 HTML、CSS 和 Javascript 编辑器。它可以在这里访问。

可以在此处访问源代码。

问题:

是否可以运行注入 iframe 的 javascript 代码,而无需重复删除和添加包含代码的 <script> 标记从和到 DOM 树?由于 DOM 操作是一项代价高昂的事情,我想尝试消除多个 DOM 操作。相反,我希望能够只更改 <script> 标记的textContent并让它运行我插入的新代码。

谢谢!

4

1 回答 1

7

如果您不介意使用evil eval,您可以重新评估 iframe 窗口中的大多数 JavaScript,例如

function someFunction(){                                // any function
    console.log(document.body.children);
}

someFunction();                                         // see normal output

var ifrm  = document.getElementsByTagName('iframe')[0], // your iframe
    iwind = ifrm.contentWindow;                         // the iframe's window

iwind.eval( someFunction.toString() );                  // re-evaluate function with eval from iframe
iwind.someFunction();                                   // see new output - output is in iframe's context

比较

iwind.someFunction = someFunction;                      // set variable
iwind.someFunction();                                   // same as calling someFunction() from parent

它应该适用于大多数有效的 JavaScript(考虑范围),但请注意usingeval可能是 bad

于 2012-10-07T23:01:33.027 回答