2015-11-02 11 views
6

Ich benutze Winkel in meinem Projekt. Aber es spielt keine Rolle)Javascript: Verwendung von DOMParser auf mobilen Geräten (iOS 7. *)

Ich habe DOMParser verwenden, um einige Daten in einem Feld zu überprüfen und bearbeiten (.Content)

Und alles war in Ordnung ... Ich nahm iPad 3 mit installiertem iOS 7 und war überrascht, ...

Warum funktioniert DOMParser nicht auf iOS 7 (funktioniert aber auf iOS 8+)?

Wie kann ich dieses Problem auf iOS 7 lösen? Vielleicht gibt es einige Problemumgehungen?

Dies ist Teil meiner Code:

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

, wenn ich diesen Code löschen - App normal arbeitet, aber mit DOMParser scheint, dass es en Fehler aus ...

+0

Können Sie genauer bestimmen, welche Art von Fehler es verursacht? – James

+0

@JavaAnto Wie kann ich es wissen? es bricht die Funktion mit Domparser ... – brabertaser19

+0

Wenn DOMParser das Problem ist, gibt es einen anderen Ansatz für dieses Problem. Sie können den HTML-Code an den Rumpf der Seite anhängen und untergeordnete Knoten wie folgt erhalten: 'var div = document.createElement ('div'); div.innerHTML = 'etwas HTML'; var result = div.childNodes; ' – James

Antwort

3

Bestimmte Browser nicht Unterstütze diese Funktionalität. Um dies zu patchen, können wir den folgenden JavaScript-Code verwenden:

* 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)); 

Das obige Skript von mozilla Webseite here extrahiert wurde.

Verwandte Themen