7

私は最近、JSP、Javascript、および Java を組み合わせた巨大な Web アプリケーションを継承しました。xml データ アイランドなどを使用してコーディングされているため、IE でのみ動作し、他のブラウザではスムーズに機能しません。IE9/10がアプリケーションのJavaScriptの一部に問題を抱えている少数のユーザー向けにWindows 7ボックスが展開された数日まで、すべてが順調でした. たとえば、次のデータ アイランドは、私の HTML ページのスニペットです。

<xml id = "underlyingdata" ondatasetcomplete="window.dialogArguments.parent.repopulateDropDown(this, underlyingdd)">
</xml>
<xml id="termdata" ondatasetcomplete="window.dialogArguments.parent.repopulateDropDown(this, termdd)">
</xml>

このページには別のコード行があります

window.dialogArguments.parent.request(underlyingdata, "CONTRACT.LIST.WB", "PULP AND PAPER|" + instrumentdd.options[instrumentdd.selectedIndex].text);

次のような関数を呼び出します

function request(xmldataisland, requestmethod, parameters
{       
    var screwcache=Math.round(Math.random()*10000);
    xmldataisland.value=null;
    xmldataisland.load("/webaccess/Request?sessionid=" + sessionid + "&request=" + requestmethod + "&parameters=" + parameters+"&screwcache="+screwcache);

}

これは IE9/10 では失敗し、「load」は「xmldataisland」オブジェクトの有効なメソッドではないというエラー (スクリプト 438 エラー) が表示されますが、IE 5 から IE 8 では問題なく動作します。

上記の関数の xmldataisland オブジェクトは XMLDocument 型だと思います。load メソッドが失敗するのはなぜですか? この問題の回避策は何ですか? 多くの情報源から、データ アイランドを使用するのはひどい考えだと読んだり聞いたりしています。その場合、これの正しい代替手段は何でしょうか?

4

2 に答える 2

10

IE10 以降、XML データ アイランドはサポートされなくなりました。ブラウザーはそれらを HTML として解析します。Mozilla Developer Network は、XML データ アイランドに代わるクロスブラウザの代替手段、つまり HTML5 の「データ ブロック」を提供する記事を作成しました。この記事では、属性が省略され、属性が実行可能なスクリプトの種類を指定していない<script>場合、要素をデータ ブロックとして使用できることを示しています。埋め込まれた XML コンテンツにタグが含まれていないことも確認する必要があります。srctype</script>

ソース: https://developer.mozilla.org/en/docs/Using_XML_Data_Islands_in_Mozilla

これが彼らが与えるHTMLの例です...

<!DOCTYPE html>
<html>
<head>
<title>XML Data Block Demo</title>
<!-- this is the data block which contains the XML data -->
<script id="purchase-order" type="application/xml">
<purchaseOrder xmlns="http://example.mozilla.org/PurchaseOrderML">
  <lineItem>
    <name>Line Item 1</name>
    <price>1.25</price>
  </lineItem>
  <lineItem>
    <name>Line Item 2</name>
    <price>2.48</price>
  </lineItem>
</purchaseOrder>
</script>
<script>
function runDemo() {
  // the raw XML data can be retrieved using this...
  var orderSource = document.getElementById("purchase-order").textContent; 
  // the XML data can be parsed into a DOM tree using the DOMParser API...
  var parser = new DOMParser();
  var doc = parser.parseFromString(orderSource, "application/xml");
  var lineItems = doc.getElementsByTagNameNS("http://example.mozilla.org/PurchaseOrderML", "lineItem");
  var firstPrice = lineItems[0].getElementsByTagNameNS("http://example.mozilla.org/PurchaseOrderML", "price")[0].textContent;
  document.body.textContent = "The purchase order contains " + lineItems.length + " line items. The price of the first line item is " + firstPrice + ".";
}
</script>
</head>
<body onload="runDemo()";>
Demo did not run
</body>
</html>

そのブロックにデータをロードするには、独自のメソッドを作成する必要があります (おそらくjQuery.getまたは.loadメソッドを使用します)。

それが役立つことを願っています!

于 2014-02-24T11:32:44.480 に答える