저는 IE6 전용 내부 레거시 웹 사이트에서 작업하고 있습니다. IE8/9는 XML Data Island 특정 스크립팅의 사용으로 인해 실패합니다. 목표는 IE9에서 볼 수 있도록 사이트를 수정하는 것입니다. 다른 브라우저는 걱정할 필요가 없습니다.IE9를 사용하여 XML 데이터 아일랜드 업데이트
수천 페이지가 넘고 100 개 이상의 JS 파일이 있으므로 다른 목표는 모든 것을 다시 쓰는 것이 아니라 IE9에서 사이트를 사용하도록 설정하는 방법을 수정하는 것입니다.
잘하고 있는지 잘 모르겠지만 다음은 일반적인 페이지 레이아웃의 예입니다. 나는 그것이 작동하고 작동하지 않는 것을 증명하기 위해 그것을 작은 테스트로 요약했습니다.
작품
- 는 XML 데이터 아일랜드 바인딩 초기.
- 하나의 XML 요소가 업데이트되면 동일한 XML 요소가 페이지의 다른 곳에서 업데이트됩니다 (두 입력 필드 중 하나의 값을 수정하고 다른 입력 필드는 포커스를 잃을 때 스위트를 따릅니다). 값을 후 XML 데이터 섬의 값을 검색
- 를 작동하지 이
변경 (적어도 나는 시도했다 방법).
- XML 데이터 아일랜드에 바인딩 된 필드를 포함 된 XML과 동기화 된 상태로 유지합니다.
단계
- (확인)를 올바르게 표시되는 보기 메시지 버튼 포함 된 XML에서 값을 클릭 문제를 재현하기.
- (확인) 입력 필드 중 하나에서 값을 변경하십시오. 다른 하나는 올바르게 업데이트됩니다.
- (확인하지 않음) 메시지를 클릭하십시오. 버튼을 다시 클릭하십시오. 메시지의 새 값이으로 업데이트되지 않았습니다.
- (1/2 ok) 수정 메시지 버튼을 클릭하면 XML이 업데이트됩니다. XML Data Island에 바인드 된 입력 필드는 갱신되지 않습니다.
- (확인) 메시지를 클릭하십시오. 버튼을 다시 클릭하십시오. 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 데이터 섬을 업데이트 할 수 있습니까?
은 IE8과 함께 그 일을 수행
여기는 IE9에서 작동 개정 된 샘플입니까? –
잘 모르겠습니다. IE8을 테스트 할 필요가 없습니다. IE9의 모든 초기 테스트에서 작동합니다. 나는 IE8이 당신이 그것을 단점 모드로 강요해야한다는 점에서 유사하다고 의심 할 것이다. (IE8 quirks 모드가 있다고 가정). –
현대 브라우저가 HTML5에서 렌더링하므로 대신 단조 모드를 사용합니다. XML 데이터 아일랜드 polyfill에서 작업 할 때 비슷한 문제가 발생합니다. – TheRealVayne