2012-07-19 59 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