语境:
我建立一个活的HTML,CSS和JavaScript编辑器。 它可以访问这里 。
该人士可以访问这里 。
题:
是否有可能运行注入的iframe不重复删除和添加往返于DOM树包含代码<script>标记的JavaScript代码? 由于DOM操作是一个昂贵的事,我想尝试和消除多个DOM操作。 相反,我希望能够只需更改<script>标记的的textContent并让它运行,我已经插入了新的代码。
谢谢!
语境:
我建立一个活的HTML,CSS和JavaScript编辑器。 它可以访问这里 。
该人士可以访问这里 。
题:
是否有可能运行注入的iframe不重复删除和添加往返于DOM树包含代码<script>标记的JavaScript代码? 由于DOM操作是一个昂贵的事,我想尝试和消除多个DOM操作。 相反,我希望能够只需更改<script>标记的的textContent并让它运行,我已经插入了新的代码。
谢谢!
如果你不介意使用邪恶 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(考虑范围),但要注意, 使用eval
可不好 。