我继承了一些使用了多年浏览器兼容性问题的JS代码。我在javascript方面的经验非常有限,因此无法确定问题所在。
具体地说,这是从SharePoint 2013安装中提取信息。它使用肥皂api调出共享点内的列表,以XML格式从列表中获取一些项目,然后将该信息添加到页面中。该代码在IE和Edge中可以正常运行,但在Chrome或Firefox中似乎无法正常工作。
我确实进行了测试,并且浏览器似乎确实输入了浏览器检测if语句的正确部分
我减少了一些原始代码,删除了append语句,并用简单的alert.length()替换了它们。完成此操作后,代码似乎正在IE / Edge中返回数据(长度> = 1),但在Chrome / FireFox中,它未返回任何数据(长度为0)。
知道我的问题在这里吗?
var WebAlerts = {} || WebAlerts;
WebAlerts.getWebAlerts = function () {
var soapEnv = '<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">\
<soap12:Body>\
<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">\
<listName>Web Alerts</listName>\
<query><Query>
<Where><And>
<Eq><FieldRef Name="Important" /><Value Type="String">1</Value></Eq>
<Geq><FieldRef Name="Expires" /><Value Type="DateTime"><Today /></Value></Geq>
</And></Where>
</Query></query>\
<viewFields><ViewFields><FieldRef Name="Body" /></ViewFields></viewFields>\
</GetListItems>\
</soap12:Body>\
</soap12:Envelope>';
var xml = $.ajax({ url: "//domain.com/_vti_bin/lists.asmx",
type: "POST", dataType: "xml", data: soapEnv,
error: WebAlerts.printError,
complete: WebAlerts.processResults,
contentType: "text/xml; charset=\"utf-8\"",
});
}
WebAlerts.processResults = function (xData, status) {
var xmlalerts;
if (browseris.ie)
{
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.loadXML(xData.responseText);
xmlalerts = $(xmldoc).find("z\\:row");
}
else
{
xmlalerts = $(xData.responseXML).find("row");
}
alert(xmlalerts.length);
}