IE11的XML Data Island支持/替换解决方案

时间:2014-12-16 15:06:22

标签: internet-explorer cross-browser activex

我正在尝试找到我们目前正在开发的Web应用程序问题的修复程序。 我们在解决方案中使用了许多XML数据岛,这些数据岛目前已被MS淘汰(参见link1)。

我尝试了以下方法:

1)使用DOMParser,但不幸的是IE 11并不支持,到目前为止所有的解决方法都指向了当前的方法:new ActiveXObject("Microsoft.XMLDOM");不再支持

2)使用hack在页面中使用x-ua-compatible将此页面设为旧文档(请参阅link2

3)找到一个可以帮助我处理这个问题的库/ javascript / jquery,找不到比上面的解决方案更多的东西来应对这种情况。

现在我的问题是:

  1. 我有什么办法可以在IE 11中处理XML Data Islands吗?
  2. 是否有任何解决方法适用于上述可用于IE 11的点1)和2)?
  3. 是否存在跨浏览器并且不需要完整应用程序重写的XML数据岛的真正替代方案?

1 个答案:

答案 0 :(得分:0)

迄今为止发现的最佳方法是关于SO的答案:

https://stackoverflow.com/a/21986537/79379

https://developer.mozilla.org/en/docs/Using_XML_Data_Islands_in_Mozilla

<!DOCTYPE html>
<html>
<head>
<title>XML Data Block Demo</title>
<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() {
  var orderSource = document.getElementById("purchase-order").textContent;
  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>