2010-04-19 4 views
1

탈출 한 HTML을 포함하는 javascript 변수가 있습니다. 이 같은 HTML 내부에 스크립트 태그가있을 수 있습니다 :Javascript IE의 HTML 및 스크립트 삽입 문제

var valueToInsert = "%3Cscript%20type%3D%22text/javascript%22%3Ealert%28%27test%27%29%3B%3C/script%3E%0A%3Cscript%20type%3D%22text/javascript%22%20src%3D%22http%3A//devserver/testinclude.js%22%3E%3C/script%3E%0A%3Cimg%20src%3D%22http%3A//www.footballpictures.net/data/media/131/manchester_united_logo.jpg%22%20/%3E" 

내가 예상대로 해고 모든 자바 스크립트를 DOM에 이것을 추가하고 싶어. - 모든 스크립트 태그가 제거 IE에서

var div = document.createElement("div"); 
div.innerHTML = unescape(valueToInsert); 
document.body.appendChild(div); 

, 내가 div.innerHTML을 설정 한 시간에 : 지금은이 방법을 사용하고 있습니다. I가 jQuery를 사용하여이 작업을 수행 할 경우

는 :

$(document.body).append(valueToInsert) 

를 모든 것이 잘 작동합니다. 나쁜 것은,이 코드가 "이미 구현 된"스크립트를 사용하는 것을 통제하지 않는 사이트에 추가 될 것이므로 jQuery를 사용할 수 없다는 것입니다.

트릭이 있습니까? jQuery가 그것을 할 수 있다면, 가능해야한다?

나는 Opera에서 또 다른 문제가 있습니다. 주입 스크립트를 다음과 같이 변경했습니다. (여전히 IE에서는 작동하지 않습니다.)

var div = document.createElement("div"); 
    div.innerHTML = unescape(valueToInsert); 
    var a = new Array(); 

    for (var i = 0; i < div.childNodes.length; i++) 
     a.push(div.childNodes[i]); 

    for (var i = 0; i < a.length; i++) 
    { 
     if (a[i].nodeName == "SCRIPT" && a[i].getAttribute("src") != null && a[i].getAttribute("src") != "" && typeof (a[i].getAttribute("src")) != "undefined") 
     { 
      var scriptTag = document.createElement("script"); 
      scriptTag.src = a[i].getAttribute("src"); 
      scriptTag.type = "text/javascript"; 
      document.body.appendChild(scriptTag); 
     } 
     else if (a[i].nodeName == "SCRIPT") 
     { 
      eval(a[i].innerHTML); 
     } 
     else 
     { 
      document.body.appendChild(a[i]); 
     } 
    } 

답변

0

대신 document.write를 사용해야합니다.

var div = document.createElement("div"); 
div.innerHTML = "removeMe" + unescape(valueToInsert); 
div.removeChild(div.childNodes[0]); 
document.body.appendChild(div); 

을 그리고 그 FF, IE, 크롬, 오페라와 사파리에서 완벽하게 작동합니다 :

+1

페이지를 렌더링 한 후 실행될 때 페이지가 지워지므로이를 수행 할 수 없습니다. – MartinHN

3

jQuery를이 무엇을 분석 한 후, 나는 그들이 조금 더미 텍스트를 앞에 추가하고 다시 그것을 제거하는 것을 보았다.