2013-02-27 2 views
0

테스트를 위해 코드 블록을 사용하는 경우 <xsl:key name="Name" match="/NewSet/ps1/Name/text()" use="." />으로 시작하는 원본 HTML을 첫 번째 상자에 쓰고 세 번째 상자에서 결과를 가져옵니다. "HTML 모드의 IFRAME "like <xsl:key name="Name" match="/NewSet/ps1/Name/text()" use="." ></xsl:key>HTML에서 "/"삭제 금지

결과는 /입니다.이 문제를 방지하려면 어떻게해야합니까?

나는 이것이 브라우저의 텍스트 엔진에 관한 것이라고 생각하십니까? 그렇지 않니?

<html> 
<head> 
    <title>Editable IFRAME test</title> 
</head> 
<body onload="SetEditable()"> 
    <b>Set your original HTML content here:</b><br /> 
    <textarea id="htmlArea" style="width: 783px; height: 189px"></textarea> 
    <br /> 
    <input type="button" onclick="CreateHtml();return false;" value="Set Content in the IFRAME"> 
    <br /> 
    <b>Editable IFRAME element:</b> 
    <br /> 
    <div style="width: 800px; height: 600px; border: 1px solid red;"> 
     <iframe style="padding-bottom: 0px; margin: 0px; padding-left: 0px; width: 100%; 
      padding-right: 0px; height: 100%; padding-top: 0px" frameborder="0" src="javascript:void(0)" 
      id="editor"></iframe> 
    </div> 
    <input type="button" onclick="ShowIFRAMEHTML();return false;" value="Show IFRAME HTML"> 
    <br /> 
    <b>HTML Mode of the IFRAME:</b> 
    <br /> 
    <textarea id="htmlMode" style="width: 783px; height: 313px"></textarea> 
    <script type="text/javascript"> 
     var editor1 = document.getElementById("editor"); //reference to the IFRAME element 
     var htmlArea1 = document.getElementById("htmlArea"); //reference to the HTML area in which we put the content 
     var htmlMode = document.getElementById("htmlMode"); //reference to the HTML area that displays the IFRAME content 
     var oDocument = editor1.contentWindow.document; 

     var sMarkup = "<html><head><title>New Document</title></head>" + 
        "<body contenteditable=true style='overflow:scroll;margin:0px;padding:0px;height:100%'>" + 
        "&nbsp;</body></html>"; 

     function SetEditable() { 
      oDocument.open(); 
      oDocument.write(sMarkup); 
      oDocument.close(); 
      oDocument["designMode"] = "on"; 
      oDocument.execCommand("2D-Position", false, true); 
     } 
     function CreateHtml() { 
      oDocument.body.innerHTML = htmlArea1.value; 
      htmlMode.value = oDocument.body.innerHTML; 
     } 
     function ShowIFRAMEHTML() { 
      alert(oDocument.body.innerHTML); 
     } 

    </script> 
</body> 
</html> 
+1

'innerHTML' 대신'.innerText' 또는'.textContent'를 사용 해보세요. (예 :'htmlMode.value = (oDocument.body.innerText || oDocument.body.textContent)') –

+0

당신은 맞습니다 @ 페드로 에스트라다, 고마워. –

답변

0

아니요, 이는 대략 innerHTML 값이 생성 된 것입니다.

HTML 코드를 iframe에 넣으면 요소로 파싱됩니다. 그런 다음 해당 요소를 HTML로 가져 오면 요소를 만드는 데 사용 된 원래 문자열을 반환하지 않고 elemtns에서 새 HTML 코드를 만듭니다.

다른 브라우저에서 테스트하면 다른 결과가 표시됩니다. 예를 들어 일부 브라우저는 태그 이름을 대문자로 만들거나 속성을 재정렬하거나 유효한 HTML 요소로 요소를 변형하거나 HTML 요소로 HTML 요소를 감싸서 유효한 문서로 만들 수 있습니다.

결과를 자체 닫기 태그로 사용하려면 XHTML 문서 (또는 HTML5 문서)를 iframe에 넣어야합니다. 그렇지 않으면 자체 마감 태그가없는 HTML로 반환됩니다 .

관련 문제