我的客户端有一个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函数的建议,但我无法将如何在此原型框架中实际实现它。非常感谢任何帮助。
答案 0 :(得分:2)
至于http://doogalbellend.blogspot.fr/2012/04/cross-browser-selectsinglenode-for-xml.html
更新 - 这在IE10中不再有效,因为selectSingleNode已从AJAX调用返回的XML文档中删除。这可以通过设置XmlHttpRequest的响应类型来解决,如下所示:
xhr.responseType ='msxml-document';
通过在选项中添加responseType: 'msxml-document'
来修改您的请求应该有效。
答案 1 :(得分:-1)
请注意,此解决方案仅在您不需要IE 10中的功能时才有效。但是如果您的网站运行正常,直到IE 10出现并且您只是希望它再次工作,我在{上找到了另一个答案{3}}
基本上你只是放入一个元标记告诉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" />';