2012-07-19 55 views
1

我正在使用仅限IE6的内部旧版网站。由于使用了特定脚本,因此IE8/9失败。目标是修改网站在IE9上可见。其他浏览器不是一个问题。使用IE9更新XML数据岛

有成千上万的100+ JS文件,网页和向上,所以在这里的其他目标不是重新写的一切,但要解决什么,我们可以启用IE9网站。

我不完全知道我在正确的这样做,但下面是一个典型的页面布局的一个例子。我已经将它浓缩为一个小测试来演示什么在工作,什么不工作。

作品

  • 初始结合XML数据岛。
  • 当一个XML元素被更新时,相同的XML元素别处的页面(修改两个输入字段和其它输入字段中的一个的值将跟随套件时,它失去焦点)上被更新。

不工作

  • 一个值之后检索XML数据岛的价值观已经改变了(至少我是如何未遂)。
  • 保持绑定到XML数据岛的字段与嵌入式XML保持同步。

步骤来重现问题

  1. (OK)点击视图消息按钮,并从嵌入XML值被正确显示。
  2. (ok)在其中一个输入字段中更改值;另一个正确更新。
  3. (不正常)再次点击视图消息按钮;消息的新值不是已更新。
  4. (1/2 OK)单击修改消息按钮和XML被更新;但绑定到XML数据岛的输入字段不会更新。
  5. (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> 

问题:是否可以这样修改反映在两个嵌入式XML和绑定的数据字段更新IE9的XML数据岛?

回答

1

各种测试后,我发现,迫使IE9进入怪癖模式允许IE9与XML数据岛发挥很好。这允许您为XML数据岛使用IE5/6脚本。

下面是修订后的样品,在IE9工作:

<!-- 
    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的工作? – 2012-07-19 16:00:43

+0

我不确定。我没有IE8来测试。它适用于我在IE9中的所有初始测试。我会怀疑IE8是类似的,因为你不得不强迫它进入怪癖模式。 (假设有一个IE8怪癖模式)。 – 2012-07-19 16:25:42

+0

它可能更安全使用 <!DOCTYPE HTML PUBLIC> - // W3C // DTD HTML 4.0 Transitional // EN“> 要强制使用怪异模式而不是<!DOCTYPE HTML>,因为现代浏览器会在HTML5中渲染它。在处理XML数据岛填充时,我们遇到类似的问题 – TheRealVayne 2015-04-16 03:59:46