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