2012-07-19 4 views
1

저는 IE6 전용 내부 레거시 웹 사이트에서 작업하고 있습니다. IE8/9는 XML Data Island 특정 스크립팅의 사용으로 인해 실패합니다. 목표는 IE9에서 볼 수 있도록 사이트를 수정하는 것입니다. 다른 브라우저는 걱정할 필요가 없습니다.IE9를 사용하여 XML 데이터 아일랜드 업데이트

수천 페이지가 넘고 100 개 이상의 JS 파일이 있으므로 다른 목표는 모든 것을 다시 쓰는 것이 아니라 IE9에서 사이트를 사용하도록 설정하는 방법을 수정하는 것입니다.

잘하고 있는지 잘 모르겠지만 다음은 일반적인 페이지 레이아웃의 예입니다. 나는 그것이 작동하고 작동하지 않는 것을 증명하기 위해 그것을 작은 테스트로 요약했습니다.

작품

  • 는 XML 데이터 아일랜드 바인딩 초기.
  • 하나의 XML 요소가 업데이트되면 동일한 XML 요소가 페이지의 다른 곳에서 업데이트됩니다 (두 입력 필드 중 하나의 값을 수정하고 다른 입력 필드는 포커스를 잃을 때 스위트를 따릅니다). 값을 후 XML 데이터 섬의 값을 검색

    • 를 작동하지

    변경 (적어도 나는 시도했다 방법).

  • XML 데이터 아일랜드에 바인딩 된 필드를 포함 된 XML과 동기화 된 상태로 유지합니다.

단계

  1. (확인)를 올바르게 표시되는 보기 메시지 버튼 포함 된 XML에서 값을 클릭 문제를 재현하기.
  2. (확인) 입력 필드 중 하나에서 값을 변경하십시오. 다른 하나는 올바르게 업데이트됩니다.
  3. (확인하지 않음) 메시지를 클릭하십시오. 버튼을 다시 클릭하십시오. 메시지의 새 값이으로 업데이트되지 않았습니다.
  4. (1/2 ok) 수정 메시지 버튼을 클릭하면 XML이 업데이트됩니다. XML Data Island에 바인드 된 입력 필드는 갱신되지 않습니다.
  5. (확인) 메시지를 클릭하십시오. 버튼을 다시 클릭하십시오. XML 값을 업데이트 한 스크립트가 올바르게 표시됩니다.

샘플

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html> 
<head> 
    <title>Data Islands</title> 

    <xml id="ResultsIsland"> 
     <result> 
      <msg>Initial Message</msg> 
     </result> 
    </xml> 

    <script type="text/javascript"> 
     function modifyDataIsland() { 
      var dataIsland = document.getElementById("ResultsIsland"); 
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
      xmlDoc.loadXML(dataIsland.innerHTML); 

      var xmlRoot = xmlDoc.documentElement; 
      xmlRoot.getElementsByTagName("msg")[0].text = new Date(); 
      dataIsland.innerHTML = xmlDoc.xml; 

      alert("msg element updated to: " + xmlRoot.getElementsByTagName("msg")[0].text); 
     } 

     function viewMessage() { 
      var d = document.getElementById("Message"); 
      var dataIsland = document.getElementById("ResultsIsland"); 
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
      xmlDoc.loadXML(dataIsland.innerHTML); 
      d.innerHTML = xmlDoc.getElementsByTagName("msg")[0].text; 
     } 
    </script> 
</head> 
<body style="margin: 100px;"> 

<div style="margin: 10px;"> 
    <button onclick="viewMessage();">view message</button> 
    message is: <span id="Message"/> 
</div> 

<table datasrc="#ResultsIsland" style="margin: 10px;"> 
    <tr> 
     <td> 
      message: <input type="text" datafld="msg" /> 
     </td> 
    </tr> 
</table> 

<table datasrc="#ResultsIsland" style="margin: 10px;"> 
    <tr> 
     <td> 
      message: <input type="text" datafld="msg" /> 
     </td> 
    </tr> 
</table> 

<div style="margin: 10px;"> 
    <button onclick="modifyDataIsland();">modify message</button> 
</div> 

</body> 
</html> 

질문 : 그것은 변화가 포함 된 XML 및 바인딩 된 데이터 필드 모두에 반영되도록 IE9과 XML 데이터 섬을 업데이트 할 수 있습니까?

답변

1

여러 가지 테스트를 거친 결과, IE9를 강제적으로 쿼크 모드로 설정하면 IE9가 XML 데이터 아일랜드에서 제대로 작동한다는 것을 알았습니다. 그리고 XML 데이터 군용으로 IE5/6 스크립팅을 사용할 수 있습니다.

<!-- 
    This comment and the following DocType forces IE9 
    into quirks mode which is needed for the XML Data Islands 
--> 
<!DOCTYPE HTML> 

<html> 
<head> 
    <title>Data Islands</title> 

    <xml id="ResultsIsland"> 
     <result> 
      <msg>Message</msg> 
     </result> 
    </xml> 

    <script type="text/javascript"> 
     function modifyDataIsland() { 
      var xml = document.all("ResultsIsland").XMLDocument; 
      xml.getElementsByTagName("msg")[0].text = new Date(); 
      alert('msg element updated to: ' + xml.getElementsByTagName("msg")[0].text); 
     } 

     function viewMessage() { 
      var xml = document.all("ResultsIsland").XMLDocument; 
      document.getElementById("Message").innerHTML = xml.getElementsByTagName("msg")[0].text; 
     } 
    </script> 
</head> 
<body style="margin: 100px;"> 

<p style="margin: 30px 10px;"> 
    Document is in 
    <strong> 
    <script type="text/javascript">document.write(document.compatMode)</script> 
    </strong> mode. 
</p> 

<div style="margin: 10px;"> 
    <button onclick="viewMessage();">view message</button> 
    message is: <span id="Message"></span> 
</div> 

<table datasrc="#ResultsIsland" style="margin: 10px;"> 
    <tr> 
     <td> 
      message: <input type="text" datafld="msg"/> 
     </td> 
    </tr> 
</table> 

<table datasrc="#ResultsIsland" style="margin: 10px;"> 
    <tr> 
     <td> 
      message: <input type="text" datafld="msg"/> 
     </td> 
    </tr> 
</table> 

<div style="margin: 10px;"> 
    <button onclick="modifyDataIsland();">modify message</button> 
</div> 

</body> 
</html> 
+0

은 IE8과 함께 그 일을 수행

여기

는 IE9에서 작동 개정 된 샘플입니까? –

+0

잘 모르겠습니다. IE8을 테스트 할 필요가 없습니다. IE9의 모든 초기 테스트에서 작동합니다. 나는 IE8이 당신이 그것을 단점 모드로 강요해야한다는 점에서 유사하다고 의심 할 것이다. (IE8 quirks 모드가 있다고 가정). –

+0

현대 브라우저가 HTML5에서 렌더링하므로 대신 단조 모드를 사용합니다. XML 데이터 아일랜드 polyfill에서 작업 할 때 비슷한 문제가 발생합니다. – TheRealVayne