2015-11-02 4 views
6

Uso angolare nel mio progetto. Ma non importa)Javascript: utilizzo di DOMParser su dispositivi mobili (iOS 7. *)

devo usare DOMParser per controllare e modificare alcuni dati in un campo (.Content)

E tutto era ok ... ho preso iPad 3 con iOS installati 7 e rimasto sorpreso ...

Perché DOMParser non funziona su iOS 7 (ma funziona su iOS 8+)?

Come posso risolvere questo problema su iOS 7? Forse ci sono alcuni workaround?

Ecco parte del mio codice:

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

Se elimino questo codice - applicazione funziona normalmente, ma con DOMParser sembra che alzare en errore ...

+0

Potresti essere più specifico sul tipo di errore che genera? – James

+0

@JavaAnto come posso saperlo? si interrompe in funzione con domparser ... – brabertaser19

+0

Se DOMParser è il problema, c'è un altro approccio a questo problema. Puoi aggiungere l'html nel corpo della pagina e ottenere i nodi figli come di seguito: 'var div = document.createElement ('div'); div.innerHTML = 'some html'; var result = div.childNodes; ' – James

risposta

3

alcuni browser non lo fanno supporta questa funzionalità. Per correggere questo, possiamo utilizzare il seguente codice 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)); 

Lo script precedente è stato estratto dal sito di Mozilla here.