Is there anyway of getting javascript code injected in an iframe to execute without removing and reappending the script tag containing it?

女生的网名这么多〃 提交于 2019-12-21 20:43:00

问题


Context:

I am building a live HTML,CSS & Javascript editor. It can be accessed here.

The source can be accessed here.

Question:

Is it possible to run javascript code injected into an iframe without repeated removal and addition of <script> tag containing the code from and to the DOM tree? Since DOM manipulation is a costly affair, I want to try and eliminate multiple DOM manipulations. Instead I want to be able to just change the textContent of the <script> tag and have it run the new code that I've inserted.

Thanks!


回答1:


If you don't mind using the evil eval, you can re-evaluate most JavaScript in the iframe's window, for example

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

compare against

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

It should work for most valid JavaScript (take into account scope), but be aware that using eval can be bad.



来源:https://stackoverflow.com/questions/12773361/is-there-anyway-of-getting-javascript-code-injected-in-an-iframe-to-execute-with

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!