을 사용하여 요소에 일부 콘텐츠를 삽입하는 스크립트가 innerHTML
있습니다.
예를 들어 내용은 다음과 같습니다.
<script type="text/javascript">alert('test');</script>
<strong>test</strong>
문제는 <script>
태그 안의 코드 가 실행되지 않는다는 것입니다. 나는 그것을 조금 봤지만 명백한 해결책이 없었다. jQuery를 사용하여 콘텐츠를 삽입하면 $(element).append(content);
스크립트 부분이 eval
DOM에 삽입되기 전에 'd'가 발생했습니다.
모든 <script>
요소 를 실행하는 코드 조각이있는 사람이 있습니까? jQuery 코드는 약간 복잡해서 어떻게되었는지 알 수 없었습니다.
편집 :
jQuery 코드를 들여다 봄으로써 jQuery가 어떻게 수행하는지 파악할 수 있었고 결과적으로 다음 코드가 생성되었습니다.
Demo:
<div id="element"></div>
<script type="text/javascript">
function insertAndExecute(id, text)
{
domelement = document.getElementById(id);
domelement.innerHTML = text;
var scripts = [];
ret = domelement.childNodes;
for ( var i = 0; ret[i]; i++ ) {
if ( scripts && nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
}
}
for(script in scripts)
{
evalScript(scripts[script]);
}
}
function nodeName( elem, name ) {
return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
}
function evalScript( elem ) {
data = ( elem.text || elem.textContent || elem.innerHTML || "" );
var head = document.getElementsByTagName("head")[0] || document.documentElement,
script = document.createElement("script");
script.type = "text/javascript";
script.appendChild( document.createTextNode( data ) );
head.insertBefore( script, head.firstChild );
head.removeChild( script );
if ( elem.parentNode ) {
elem.parentNode.removeChild( elem );
}
}
insertAndExecute("element", "<scri"+"pt type='text/javascript'>document.write('This text should appear as well.')</scr"+"ipt><strong>this text should also be inserted.</strong>");
</script>
function testFunction(){ alert('test'); }
를 들어 innerHTML에 삽입 된 코드에 함수를 추가 한 다음 호출을 시도하면 함수가 정의되어 있지 않다는 메시지가 표시됩니다.