3

我的客户有一个 Web 应用程序开始在 IE10 中引发错误。我追踪了错误的来源,似乎 IE 10 不再支持 selectSingleNode。这是使用它的功能:



    ScormApi.prototype.setTom = function( tom ) {
         this.tom = CreateXmlDocument();
         var rootelem = importAllNode( this.tom, this.tomTemplate.documentElement, true );
         this.tom.appendChild( rootelem );
         // Transforms the tracing of the user in tracking template
         // Perform the navigation on all nodes of tom and for each value found
         // Sets it to this.tom
         rootelem = tom.selectSingleNode('//cmi');
         this.parseXML( rootelem, '/' , this, this.setTomParam );
    }

使用以下代码调用它:



    var ajxreq = new Ajax.Request(
    this.baseurl+'?op=Initialize',
    {   method: 'post',
         asynchronous:false,
         postBody: strSoap,
         requestHeaders: {
             'Man':"POST " + this.baseurl + " HTTP/1.1",
             'Host':this.host,
             "Content-type":"text/xml; charset=utf-8",
             "SOAPAction":this.serviceid + "Initialize",
             "X-Signature":playerConfig.auth_request
         }
    });

    if( ajxreq.transport.status == 200 ) {
         try {
             this.setTom( ajxreq.transport.responseXML );
         }
    }

我找到了将响应类型更改为 msxml-document、使用 querySelector 或使用 jQuery 的 find 函数的建议,但我无法拼凑出如何在这个原型框架中实际实现它。任何帮助将不胜感激。

4

2 回答 2

2

至于http://doogalbellend.blogspot.fr/2012/04/cross-browser-selectsinglenode-for-xml.html

更新 – 这在 IE10 中不再有效,因为 selectSingleNode 已从 AJAX 调用返回的 XML 文档中删除。这可以通过设置 XmlHttpRequest 的响应类型来解决,如下所示:

xhr.responseType = 'msxml 文档';

通过添加选项来修改您的请求responseType: 'msxml-document'应该可以工作。

于 2013-07-19T10:26:01.890 回答
-1

请注意,此解决方案仅在您不需要 IE 10 的功能时才有效。但如果您有一个在 IE 10 出现之前运行良好的网站并且您只是希望它再次运行,我在IE10 javascript access xml上找到了这个其他答案元素问题

基本上,您只需放入一个元标记来告诉 IE 10 将您的网站视为 IE9 并再次运行。

在 PHP 中,如果您只想将标签放入 IE10,您可以这样做:

$isIE10 = (bool) preg_match('/(?i)msie [10]/',$_SERVER['HTTP_USER_AGENT']);
if ($isIE10) echo '<meta http-equiv="X-UA-Compatible" content="IE=9" />';
于 2013-08-19T06:11:56.970 回答