2012-11-20 3 views
1

전체 페이지를 다시 게시하지 않고 파일을 업로드하는 데 ajax_upload을 사용하고 있습니다. 서버가 응답을 XML로 반환하므로 내 onComplete 함수에서 구문 분석합니다. Chrome, Safari, Firefox에서는 작동하지만 Internet Explorer에서는 작동하지 않습니다. Internet Explorer에서 작동하지 않는 이유는 적어도 IE가 iframe의 XML을 구문 분석하고 iframe이 크기 0으로 설정되어 있어도 구문 강조 표시와 함께 표시한다는 것입니다. ajax_uploads iframe을 읽으면 IE의 구문 강조 때문에 $ .parseXml()을 구문 분석 할 수없는 XML의 손상된 버전이 표시됩니다.Internet Explorer의 iframe에서 XML 가져 오기

Google 검색을 사용하여 iframe.document.XMLDocument를 사용하여 iframe에서 원시 XML을 가져 오는 것에 대한 언급이 발견되었지만 나에게 적합하지 않으며 언급하는 게시물은 실제로 오래되었습니다.

질문은 IE에서 구문 강조 표시없이 iframe에서 XML 데이터를 가져 오는 방법을 알고 있습니다 (HTML을 추가하고 XML에서 태그를 이스케이프 처리 함). IE는 HTTP 헤더 또는 이와 유사한 XML을 구문 분석하지 않습니까?

답변

0

나는이 문제를 해결하는 데 Content-Type: text/plain 도움이 될 것이라고 생각했지만 다른 브라우저에서만 도움이됩니다. IE는 콘텐츠 형식을 감지하는 자체 방식을 가지고 있으며이 동작을 쉽게 해제 할 수 없습니다. 이에 대한 자세한 내용은 MSDN 이상에서 간단히 here입니다.

물론 당신이 할 같은 더러운 해킹 수 :

<iframe src="test.xml" onload="test()" id="f1"></iframe> 

그리고 강조 코드 분석 :

function test() { 
    var iframe = document.getElementById('f1'); 
    var frameBody = iframe.contentWindow.document.body; 

    // remove unneeded toggle links +/- 
    var links = frameBody.getElementsByTagName('a'); 
    for (var i = links.length - 1; i >= 0; i--) { 
     if(links[i].className === 'b') { 
      links[i].parentNode.removeChild(links[i]); 
     } 
    } 

    // display parsed XML source 
    alert(frameBody.innerText); 

    // parse cleaned highlight code source to new XML document 
    var xml = $.parseXML(area.value); 
    alert(xml); 
} 

이 IE6-8에서 작동하지만이 방법은 신뢰할 수없는입니다 :) 그래서 가능한 경우이 문제를 피하려면 XML 대신 JSON을 사용하는 것이 좋습니다.

+0

다른 부분에서 iframe 대신 $ .ajax()를 사용할 수 있기 때문에이 부분에서 XML을 사용할 수있을 때 JSON을 사용해야하는 것은 나쁘다. 하지만 항상 솔루션의 한 부분을 좋아하지 않는 브라우저가 있으므로 JSON을 오늘 보내고 어떻게 변경되는지 살펴 봐야합니다. – esrange

+0

ie 9에서도이 작업을 수행 할 수 있습니까? – Codler

+0

IE9는 다른 최신 브라우저처럼 작동합니다. 'xml' 응답에'text/plain'을 설정하기 만하면됩니다. 그러면 추한 파싱없이 작동 할 것입니다. – Inferpse