2009-04-22 4 views
5

일부 QA 테스터가 유용한 디버깅 정보를 제출할 수 있도록 북마크를 작성하려고합니다. 현재 window.location을이 디버깅 정보를 제공하는 URL로 설정할 수 있지만이 리소스는 xml-stylesheet 처리 지시어가있는 XML 문서입니다.브라우저에서 xml-stylesheet 처리 지침을 무시하거나 무시하도록 할 수 있습니까?

테스터가 원시 XML 데이터를 일반 텍스트로 보거나 IE 및 Firefox의 기본 XML 렌더링을 볼 수 있다면 실제로 더 편리 할 것입니다.

Internet Explorer 또는 Firefox를 사용하여 XML 문서 내에 제공된 XML 스타일 시트 지시문을 비활성화하거나 무시하는 방법을 아는 사람이 있습니까?

편집 : 나는이 질문에 현상금을 열었습니다. 요구 사항 : 스타일 시트 처리를 비활성화 및 텍스트로 렌더링

  • 허용
  • (서로 다른 솔루션이 될 수 있습니다)

    • 클라이언트 측 코드 만 사용자 개입이 IE와 파이어 폭스 모두
    • 솔루션 허용되지 않는다하여 필요 사용자 정의 XSL와
    • 재정의 스타일 시트 처리
    • 브라우저의 기본 XML 스타일 시트로 XML을 렌더링 허용 허용

    답변

    3

    편집 : 모든 미리보기에서 좋은 듯하지만, 나쁘지는 클릭 할 수있는 예는 아마 레이아웃은 역사에 괜찮 ... 엉망 일 것 같다.

    나는 IE의 유효성을 확인했지만 IE와 Firefox 모두 "view-source :"가상 프로토콜을 지원하지 않는다. Mac의 Firefox는 실제로 그것을 이해하지만 Safari는 이해하지 못합니다.

    다음 북마크릿은 the XML에 지정된 the XSLT transformation을 트리거하지 않습니다. Firefox는 일부 색상을 사용하여 이것을 렌더링하지만 보통 XML without any XSLT에 사용할 기본 변환을 실행하지 않습니다 (따라서, view-source의 결과로 Firefox에서 일반적으로 볼 수있는 축소 가능한 문서 트리가 생성되지 않습니다) :

    javascript:(function(){ 
        var u = 'http://www.w3schools.com/xsl/cdcatalog_with_ex1.xml'; 
        var w = window.open(); 
        w.document.location.href = 'view-source:' + u; 
    })() 
    

    Ajax를 사용하여 문서를 가져 오는 경우 alertoneporter으로 제한되지 않고 새 창에서도 표시 할 수 있습니다. 다시 말하지만 지정된 XSLT 변환을 호출하지 않습니다.

    javascript:(function(){ 
        var u = 'http://www.w3schools.com/xsl/cdcatalog_with_ex1.xml'; 
    
        var w = window.open(); /* open right away for popup blockers */ 
    
        var x = new XMLHttpRequest(); 
        x.open('GET', u, true); 
        x.onreadystatechange = function(){ 
        if(x.readyState == 4){ 
         w.document.open('text/html'); 
         /* hack to encode HTML entities */ 
         var d = document.createElement('div'); 
         var t = document.createTextNode(x.responseText); 
         d.appendChild(t); 
         w.document.write('<html><body><pre>' 
          + d.innerHTML + '</pre></body></html>'); 
         w.document.close(); 
         w.focus(); 
        } 
        }; 
        x.send(null); 
    })() 
    
    0

    내가 아는 한, 당신이하려는 일을 할 수있는 방법이 없습니다. 문제는 javascript가 클라이언트 쪽 xml/xsl transform에서 xml의 DOM을 읽을 수 없다는 것입니다. 지금까지 javascript가 우려되는 것처럼, 그것은 정상적인 HTML DOM에서 실행 중이다.

    그러나 webapp의 유형에 따라 약간의 희망이있을 수 있습니다. ajax를 사용하여 현재 url의 XML을 얻을 수 있습니다. 게시물 데이터가 없거나 임의의 임의성이없는 한이 메서드는 정상적으로 작동합니다.

    2

    두 브라우저에서 모두 "소스보기"를 할 수 없습니까?

    +1

    테스터에게 너무 많은 정신적 노력을 기울 이길 원하지 않습니다. :) 그러나 놀랍지 않게 이것은 지금까지 최선의 선택처럼 보입니다. –

    +0

    IE8과 Firefox에서 소스 뷰어는 XML을 표시하는 데 아주 능숙합니다. –

    +0

    소스를 보는 앱 (예 : Notepad2)을 변경하려면 http://dotnet.org.za/thea/archive/2004/11/25/7933.aspx –

    1

    콘텐츠를 브라우저에서 출력하기 전에 중간 단계를 사용하여 XML을 사전 처리함으로써 처리 명령을 피할 수 있습니다.

    클라이언트 측 제안

    1. 는 DOM으로 XML을 구문 분석 Ajax 요청
    2. 를 통해 관련 XML 문서를 검색합니다 (참고 : DOM하지 DOM)
    3. DOM을 탐색하여 브라우저에서 필요한 데이터를 렌더링하십시오.

    서버 측 제안은

    대신 직접 관련 XML 문서를 요청하는 대신 당신이 원하지 않는 모든 XML 내용에서 실제로 모든 처리 지침, 또는 제거 프록시 스크립트에 요청을합니다.

    대신 :

    window.location = 'http://example.com/document.xml'; 
    

    사용 :

    window.location = 'http://example.com/proxy/'; 
    


    에서 스크립트 http://example.com/proxy/ 것 다음 proce을 제거하는 것이 필요하다 어떤

    1. 로드 document.xml
    2. 사용 XML 내용
    3. 출력 XML 내용만큼 당신이 도메인 간 권한, 트릭을 할 것 XML 소스와 간단한 아약스 요청/경고 상자 처리하지 것처럼
    +0

    "다른 문서를 렌더링하거나 다른 문서를 가리 키기"만하면됩니다. –

    2

    에서 ssing 명령. IE와 호환되도록 xmlHttp 선언에 약간을 추가해야합니다.

    <html> 
    <body> 
    
    <script language="JavaScript"> 
    function ajaxFunction() 
    { 
    
    var xmlHttp=new XMLHttpRequest();; 
    
        xmlHttp.onreadystatechange=function() 
        { 
        if(xmlHttp.readyState==4) 
         { 
         alert(xmlHttp.responseText); 
         } 
        } 
        xmlHttp.open("GET","YOURFILE.xml",true); 
        xmlHttp.send(null); 
    
    } 
    </script> 
    
    <a href="#" onclick="JavaScript:ajaxFunction()">Errors</a> 
    
    </body> 
    </html>