我正在开发一个仅限 IE6 的内部遗留网站。由于使用了XML Data Island特定的脚本,IE8/9 失败。目标是将站点修改为可在 IE9 上查看。其他浏览器不是问题。
有数千页和超过 100 多个 JS 文件,所以这里的另一个目标不是重写所有内容,而是修复我们可以为 IE9 启用该站点的内容。
我不完全确定我这样做是否正确,但以下是典型页面布局的示例。我把它浓缩成一个小测试来证明什么是有效的,什么是无效的。
作品
- 初始绑定 XML 数据岛。
- 当一个 XML 元素被更新时,相同的 XML 元素在页面的其他地方也被更新(修改两个输入字段之一的值,另一个输入字段在失去焦点时将跟随套件)。
不工作
- 在值更改后检索 XML 数据岛的值(至少我尝试过的方式)。
- 使绑定到 XML 数据岛的字段与嵌入的 XML 保持同步。
重现问题的步骤
- (ok) 单击查看消息按钮,嵌入的 xml 中的值正确显示。
- (ok) 更改其中一个输入字段中的值;另一个已正确更新。
- (不行)再次点击查看消息按钮;消息的新值不会更新。
- (1/2 ok) 点击修改消息按钮,XML 更新;但是绑定到 XML 数据岛的输入字段不会更新。
- (ok) 再次点击查看消息按钮;正确显示更新 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>
问题:是否可以使用 IE9 更新 XML 数据岛,以便将更改反映在嵌入的 XML 和绑定的数据字段中?