2015-11-02 60 views
6

我在我的項目中使用了angular。不過,這並不重要)Javascript:在移動設備上使用DOMParser(iOS 7. *)

我必須使用的DOMParser在一個場(.Content

,一切都OK了...我花了iPad 3的與安裝的iOS 7,並驚訝於檢查和編輯一些數據...

爲什麼DOMParser不適用於iOS 7(但適用於iOS 8+)?

我該如何解決iOS 7上的這個問題?也許有一些解決方法?

這裏是我的代碼部分:

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

如果我刪除此代碼 - 應用程序工作正常,但似乎的DOMParser它提高連接錯誤...

+0

你能更具體地指出它會拋出什麼樣的錯誤嗎? – James

+0

@JavaAnto我怎麼知道它? 它破壞功能與domparser ... – brabertaser19

+0

如果DOMParser是問題,還有另一種方法來解決這個問題。您可以將html附加到頁面的主體中,並獲取如下所示的子節點:var div = document.createElement('div'); div.innerHTML ='some html'; var result = div.childNodes;' – James

回答

3

某些瀏覽器不支持這個功能。爲了修補這個,我們可以使用下面的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)); 

上述腳本是從Mozilla的網站here提取。

相關問題