2014-12-03 2 views
0

Я написал веб-страницу (с HTML, CSS и javascript), которая загружает информацию из XML-файла, чтобы «заполнить пробелы» в элементах на стр. Все работает отлично, если я не загружаю страницу в Internet Explorer (я использую IE 11.0).Internet Explorer 11 не будет читать «getElementById» для XML и возвращает null

У меня было несколько проблем, и я работал над несколькими из них, но новые проблемы продолжают появляться, поэтому я думаю, что просто не понимаю, как IE работает с XML.

Ошибки я получаю:

Unable to get property 'querySelectorAll' of undefined or null reference 

, когда я использую код:

selectedBookNodeList = bookDataDocument.getElementById(bookId); 

В отладчике IE он показывает "selectedBookNodeList" как NULL, но bookDataDocument не является нулевой , Опять же, это отлично работает в Chrome и Firefox (вот ссылка: http://www.pattmayne.com/stories2/).

Почему это NULL в IE11, но он отлично работает в других браузерах ??

Вот весь код:

var bookPage; 

    var bookDataDocument; 
    var XMLConnection; 



    var bookDataRootNode; 
    var selectedBookNode; 

    var bookDescription; 
    var bookDescription2; 
    var bookDescription3; 
    var bookImage; 
    var bookTitle; 
    var paperbackLink; 
    var ebookLink; 



function setupXML() 
{ 

    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    XMLConnection=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
    XMLConnection=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    XMLConnection.open("GET", "novels/book_data.xml", false); 
    XMLConnection.send(null); 
    bookDataDocument = XMLConnection.responseXML; 
} 

    function setBook(bookId) 
    { 
     selectedBookNodeList = bookDataDocument.getElementById(bookId); 

     bookTitle = selectedBookNodeList.querySelectorAll("title").item(0).childNodes[0].nodeValue; 

     bookDescription = selectedBookNodeList.querySelectorAll("description").item(0).childNodes[0].nodeValue; 

     bookDescription2 = selectedBookNodeList.querySelectorAll("description2").item(0).childNodes[0].nodeValue; 

     bookDescription3 = selectedBookNodeList.querySelectorAll("description3").item(0).childNodes[0].nodeValue; 

     ebookLink = selectedBookNodeList.querySelectorAll("ebookLink").item(0).childNodes[0].nodeValue; 

     paperbackLink = selectedBookNodeList.querySelectorAll("paperbackLink").item(0).childNodes[0].nodeValue; 

     bookImage = selectedBookNodeList.querySelectorAll("coverImage").item(0).childNodes[0].nodeValue; 


     bookPage = document.getElementById("storiesWindow").contentWindow.document; 

     bookPage.getElementById("bookTitle").innerHTML = bookTitle; 
     bookPage.getElementById("description").innerHTML = bookDescription; 
     bookPage.getElementById("description2").innerHTML = bookDescription2; 
     bookPage.getElementById("description3").innerHTML = bookDescription3; 
     bookPage.getElementById("buyEbookLink").href = ebookLink; 
     bookPage.getElementById("buyPaperbackLink").href = paperbackLink; 
     bookPage.getElementById("coverImage").src=bookImage; 

    } 

Я действительно люблю решение, но я хотел бы еще больше, чтобы понять динамику, что я, очевидно, не понимая. Я хочу использовать XML для других вещей в будущем.

ответ

0

Я решил это, пропустив инструкцию getElementById. Вместо этого я запросил «книгу», а затем использовал «getAttribute (« id »)» и написал функцию с циклом для сравнения идентификаторов с bookId, который был отправлен исходной функции.

Вот неподвижная, рабочий код:

function setBook(bookId) 
    { 
     listOfBooks = bookDataDocument.querySelectorAll("book"); 

     selectedBook = listOfBooks.item(2); 

     getSelectedBook(bookId); 

     bookTitle = selectedBook.querySelectorAll("title").item(0).childNodes[0].nodeValue; 

     bookDescription = selectedBook.querySelectorAll("description").item(0).childNodes[0].nodeValue; 

     bookDescription2 = selectedBook.querySelectorAll("description2").item(0).childNodes[0].nodeValue; 

     bookDescription3 = selectedBook.querySelectorAll("description3").item(0).childNodes[0].nodeValue; 

     ebookLink = selectedBook.querySelectorAll("ebookLink").item(0).childNodes[0].nodeValue; 

     paperbackLink = selectedBook.querySelectorAll("paperbackLink").item(0).childNodes[0].nodeValue; 

     bookImage = selectedBook.querySelectorAll("coverImage").item(0).childNodes[0].nodeValue; 


     bookPage = document.getElementById("storiesWindow").contentWindow.document; 

     bookPage.getElementById("bookTitle").innerHTML = bookTitle; 
     bookPage.getElementById("description").innerHTML = bookDescription; 
     bookPage.getElementById("description2").innerHTML = bookDescription2; 
     bookPage.getElementById("description3").innerHTML = bookDescription3; 
     bookPage.getElementById("buyEbookLink").href = ebookLink; 
     bookPage.getElementById("buyPaperbackLink").href = paperbackLink; 
     bookPage.getElementById("coverImage").src=bookImage; 

    } 

    function getSelectedBook(bookId) 
    { 
      for (var i=0; i<listOfBooks.length; i++) 
     { 
      bookString = listOfBooks.item(i).getAttribute("id"); 

      if (bookString == bookId) 
      selectedBook = listOfBooks.item(i); 
     } 

    } 

    function setupXML() 
    { 

     if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
     XMLConnection=new XMLHttpRequest(); 
     } 
    else 
     {// code for IE6, IE5 
     XMLConnection=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

     XMLConnection.open("GET", "novels/book_data.xml", false); 
     XMLConnection.send(null); 
     bookDataDocument = XMLConnection.responseXML; 
    } 
0

Привет Я знаю, что это старый, но я наткнулся на тот же вопрос вчера с клиентом. Проблема, которую я обнаружил в этом случае, заключалась в том, что у клиента были IE11 и Flash 11, но на моем компьютере были IE11 и Flash 14; Я обновил свою флеш-память, и все сработало, sop выглядит так, как Flash 11 был до IE11, есть некоторая проблема поддержки в DOM для Flash-объекта.

Надеется, что это помогает кто-то другое тоже :-)

С уважением

Лиам