以下是我尝试跨浏览器功能的片段:
xmlhttp.open("GET", "/wp-content/testimonials.xml", true);
if (xmlhttp.addEventListener) {
xmlhttp.addEventListener("load", retrieveTestimonial, false);
}
else if (xmlhttp.attachEvent) {
xmlhttp.attachEvent("onload", retrieveTestimonial);
}
xmlhttp.send();
function retrieveTestimonial () {
xmlDoc = xmlhttp.responseXML;
//Get DOM elements ready to be replaced by relevant testimonial info
var testimonial = document.getElementById("foot-testimonial");
var xmlTags = xmlDoc.getElementsByTagName("PROGRAM");
... more
我加入这个特定代码块的原因是因为我的脚本在Chrome,Firefox,IE11,Safari甚至是Android浏览器中呈现得很好。但是,在IE9中,我对retrieveTestimonial
函数中设置的某些变量未定义。如果我尝试将任何这些变量(xmlTags等)记录到IE9中的控制台,我得到'is undefined'
。所以,据我所知,该函数未被调用,这表明XHR加载事件未触发。
编辑:该函数正在触发,因为我能够将变量xmlDoc
记录到控制台(对象)。出于某种原因,IE9不喜欢我的一些XML分配,因为它们返回undefined。这是函数的其余部分:
for(var i = 0; i < xmlTags.length; i++) {
//If the program name from the URL matches the <WEBTITLE> value
if (progName == xmlTags[i].childNodes[1].childNodes[0].nodeValue) {
// Get each relevant piece of info from the XML file
var progTitle = xmlTags[i].childNodes[3].childNodes[0].nodeValue;
var studentName = xmlTags[i].childNodes[5].childNodes[0].nodeValue;
var textBody = xmlTags[i].childNodes[7].childNodes[0].nodeValue;
break;
}
IE9似乎不喜欢在与其他浏览器相同的索引上看到节点,尽管我还没有找到原因。
是否有一个已知的解决方法或我只是遗漏了一些简单的东西?我讨厌在jQuery中重写脚本,例如,考虑到它在其他地方的工作就像一个魅力。