2012-07-12 67 views
4

在Firefox和Chrome中,XML DOM的文档节点对象的documentURI属性将返回DOM的URI,前提是该对象是使用XMLHTTPRequest对象创建的。使用Internet Explorer检索XML DOM对象的URI

是否存在Internet Explorer DOM的等效属性,如果是的话是什么? documentURI,url,URLbaseURI属性全部返回null或undefined。

MSXML documentationurl特性,使得我希望这将返回在创建该DOM HTTP请求中使用的URL - 但给出的例子不使用XMLHTTPRequest

我用来创建DOM,然后测试该属性的代码如下:

function getXslDom(url) { 
    if (typeof XMLHttpRequest == "undefined") { 
     XMLHttpRequest = function() { 
      return new ActiveXObject("Msxml2.XMLHTTP.6.0"); 
     }; 
    } 
    var req = new XMLHttpRequest(); 
    req.open("GET", url, false); 
    req.send(null); 
    var status = req.status; 
    if (status == 200 || status == 0) { 
     return req.responseXML; 
    } else { 
     throw "HTTP request for " + url + " failed with status code: " + status; 
    } 
}; 
var xslDom = getXslDom('help.xsl'); 
// the following shows "undefined" for IE 
window.alert(xslDom.documentURI); 
+0

在MSDN上给出的例子没有使用XMLHttpRequest,但它会是一个选择使用替代方法(DOMDocument->加载)? – 2012-07-12 13:17:18

+0

@ Dr.Molle不幸的是,这必须使用XMLHttpRequest。这是针对基于浏览器的XSLT 2.0处理器的JavaScript API的 - 所以DOM对象很可能来自AJAX风格的请求,但我们实际上并不能控制DOM的创建方式 - 因为这是界面的另一面。 – pgfearo 2012-07-12 13:43:41

+0

你试过'.URLUnencoded'吗?对不起,我没有IE来测试它。除了IE之外,它在大多数浏览器中都是未定义的。 – Adi 2012-07-14 13:07:05

回答

0

使用从您链接我设法让MSXML页面的例子它的工作:

<script> 

    var getXslDom = function(url) { 
    if(typeof ActiveXObject === 'function') { 
     var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0"); 
     xmlDoc.async = false; 
     xmlDoc.load(url); 
     if (xmlDoc.parseError.errorCode != 0) { 
     var myErr = xmlDoc.parseError; 
     throw "You have error " + myErr.reason; 
     } else { 
     return xmlDoc; 
     } 
    } else { 
     var req = new XMLHttpRequest(); 
     req.open("GET", url, false); 
     req.send(null); 
     var status = req.status; 
     if (status == 200 || status == 0) { 
      return req.responseXML; 
     } else { 
      throw "HTTP request for " + url + " failed with status code: " + status; 
     } 
    } 
    } 

    var dom = getXslDom('help.xsl') 
    alert(dom.documentURI || dom.url) 

</script> 

这里是a demo

干杯!

PS:我使用“alert”只是因为OP似乎使用它,我个人更喜欢“console.log”,我也推荐给OP。

+0

您在这里做的是以另一种方式创建DOM(类似于我链接的示例中),以显示某些情况下dom.url可以工作。我希望有一个更通用的解决方案,因为我们从DOM检索URI的代码位于API的另一端 - 我们无法控制如何创建DOM。在console.log上:我们完成的解决方案利用针对各种浏览器和插件优化的不同LogHandler和LogFormatters的Log4J风格日志记录 - 'alert()'仅用于简化此处的内容 – pgfearo 2012-07-19 16:02:33

+0

确保内容类型为text/xml。如果您无法控制内容类型,则无法在不解析手动解析XML的情况下使其工作。 – 2012-07-19 17:30:47

+0

是的,我们无法控制HTTP请求中的内容类型,因为它位于API的另一端 - 但假设它是text/xml是合理的。如果IE没有提供访问DOM URI的方法(我越来越可能看到这种情况),那么这与其他不幸的浏览器不一致 – pgfearo 2012-07-21 11:35:26

相关问题