2015-11-02 11 views
6

Używam kątowego w moim projekcie. Ale to nie ma znaczenia)Javascript: użycie DOMParser na urządzeniach mobilnych (iOS 7. *)

muszę używać DOMParser sprawdzić i edytować niektóre dane w jednym polu (.Content)

i wszystko było ok ... wziąłem iPada 3 z zainstalowanym systemem iOS 7 i był zaskoczony ...

Dlaczego DOMParser nie działa na iOS 7 (ale działa na iOS 8+)?

Jak mogę rozwiązać ten problem na iOS 7? Może są jakieś rozwiązania?

Tutaj jest częścią mojego kodu:

var parser = new DOMParser(); 
var doc = parser.parseFromString('<div id="fetchContent">' + $scope.news.Content + '</div>', "text/html"); 
... 
$scope.news.Content = doc.getElementById('fetchContent').innerHTML; 

jeśli usunę ten kod - aplikacja działa normalnie, ale z DOMParser wydaje się, że podniesienie en błędu ...

+0

Mógłbyś być bardziej konkretny, jaki rodzaj błędu wyrzuca? – James

+0

@JavaAnto jak mogę to wiedzieć? to łamie funkcję z domparser ... – brabertaser19

+0

Jeśli DOMParser jest problem, istnieje inne podejście do tego problemu. Możesz dołączyć html do treści strony i uzyskać węzły potomne jak poniżej: 'var div = document.createElement (" div "); div.innerHTML = 'some html'; var result = div.childNodes; ' – James

Odpowiedz

3

Niektóre przeglądarki nie obsługuje tę funkcję. Do tej poprawki, możemy użyć następującego kodu javascript:

* inspired by https://gist.github.com/1129031 */ 
/*global document, DOMParser*/ 

(function(DOMParser) { 
    "use strict"; 

    var 
     proto = DOMParser.prototype 
    , nativeParse = proto.parseFromString 
    ; 

    // Firefox/Opera/IE throw errors on unsupported types 
    try { 
     // WebKit returns null on unsupported types 
     if ((new DOMParser()).parseFromString("", "text/html")) { 
      // text/html parsing is natively supported 
      return; 
     } 
    } catch (ex) {} 

    proto.parseFromString = function(markup, type) { 
     if (/^\s*text\/html\s*(?:;|$)/i.test(type)) { 
      var 
       doc = document.implementation.createHTMLDocument("") 
      ; 
       if (markup.toLowerCase().indexOf('<!doctype') > -1) { 
        doc.documentElement.innerHTML = markup; 
       } 
       else { 
        doc.body.innerHTML = markup; 
       } 
      return doc; 
     } else { 
      return nativeParse.apply(this, arguments); 
     } 
    }; 
}(DOMParser)); 

Powyższy skrypt został wyodrębniony ze strony Mozilli here.