2013-08-22 20 views
5

Pracuję nad unowocześnieniem tej naprawdę starej aplikacji sieciowej do pracy na nowoczesnych przeglądarkach, a ja napotkałem problem z IE 10. W końcu doszedłem do punktu, w którym muszę konwertować dokument XML na ciąg znaków:javascript: xml do napisu w IE 10

function xmlToString(xmlElement) 
{ 
    if (document.evaluate) 
    { 
      var serializer = new XMLSerializer() 
      var strXml = serializer.serializeToString(xmlElement) 
    } 
    else 
      var strXml = xmlElement.xml 
} 

Pierwszy blok if dla przeglądarki Firefox i Chrome; to działa dobrze. Linia po drugiej jest dla Internet Explorera. Działa dobrze na 8 i 9, ale nie 10 (i musi działać na wszystkich 3). Z tego, co udało mi się zebrać, wynika to z tego, że IE 10 odchodzi od wcześniejszych sposobów obsługi xml przez xml do czegoś bliższego standardowi. Jednak nie znalazłem zastępstwo dla właściwości .xml w IE 10 jeszcze?

Czy ktoś wie, w jaki sposób mogę przekonwertować dokument XML na ciąg znaków w IE 10?

Dzięki.

EDYCJA: Zatem RZECZYWISTĄ przyczyną problemu jest to, że w IE 10 wartość xmlElement.xml jest niezdefiniowana. Co więcej, nie konwertował dokumentu XML na ciąg znaków; ta właściwość była już reprezentacją ciągów dokumentu xml. Nadal trzeba dowiedzieć się, jak to zrobić w IE 10.

EDIT 2: Więc ja zorientowali się odpowiedź, ale najwyraźniej im nie wolno właściwie odpowiedzieć na moje własne pytanie przez kilka godzin, tak źle po prostu skopiować go tutaj teraz:

AAAnd oczywiście, około 5 minut po Wysyłam to, wreszcie wymyślę właściwe pytania, aby zapytać Google ... -_-

W każdym razie, okazuje się, że IE 9 i wyżej obsługuje XMLSerializer, więc było to kwestią ustalenia, jak wykryć tę funkcjonalność bez wyobcowania dowolna z niezbędnych przeglądarek. This page pokazał mi niesamowity sposób wykrywania funkcji javascript, które sprawiły, że wszystko działało.

Oto ostateczny kod, to działa na IE 8 i 10, jak również najnowszego Chrome i Firefox:

function xmlToString(xmlElement) 
{ 
    if (typeof XMLSerializer == 'function') 
    { 
     var serializer = new XMLSerializer() 
     var strXml = serializer.serializeToString(xmlElement) 
    } 
    else 
     var strXml = xmlElement.xml 
} 

Ostatnia linia nadal ma być tam za to pracować na IE 8

Odpowiedz

0

Spróbuj zrobić to za pomocą DOMParser.

function xmlToString(xmlElement) 
{ 
    if (document.evaluate) 
    { 
     var parser = new DOMParser(); 
     var strXml = parser.parseFromString(xmlElement, "text/xml"); 
    } 
    else 
     var strXml = xmlElement.xml 
} 

sprawdzić ten artykuł o DOMParser and XMLSerializer

Oto demo

0

Proszę pozwolić IE10 użyć pierwszego bloku (już używane przez Firefox i Chrome)