diff --git a/src/managers/views/iframe.js b/src/managers/views/iframe.js index 3280a78..25e4c50 100644 --- a/src/managers/views/iframe.js +++ b/src/managers/views/iframe.js @@ -102,7 +102,8 @@ class IframeView { // Firefox has trouble with baseURI and srcdoc // TODO: Disable for now in firefox - if("srcdoc" in this.iframe) { + + if(("srcdoc" in this.iframe)) { this.supportsSrcdoc = true; } else { this.supportsSrcdoc = false; diff --git a/src/mapping.js b/src/mapping.js index c04a6b8..1147f5a 100644 --- a/src/mapping.js +++ b/src/mapping.js @@ -44,16 +44,27 @@ class Mapping { } walk(root, func) { + //IE11 has strange issue, if root is text node IE throws exception on + //calling treeWalker.nextNode(), saying + //Unexpected call to method or property access instead of returing null value + if(root && root.nodeType === Node.TEXT_NODE) { + return; + } + //safeFilter is required so that it can work in IE as filter is a function for IE + // and for other browser filter is an object. + var filter = { + acceptNode: function(node) { + if (node.data.trim().length > 0) { + return NodeFilter.FILTER_ACCEPT; + } else { + return NodeFilter.FILTER_REJECT; + } + } + }; + var safeFilter = filter.acceptNode; + safeFilter.acceptNode = filter.acceptNode; //var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT + NodeFilter.SHOW_TEXT, null, false); - var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, { - acceptNode: function (node) { - if ( node.data.trim().length > 0 ) { - return NodeFilter.FILTER_ACCEPT; - } else { - return NodeFilter.FILTER_REJECT; - } - } - }, false); + var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, safeFilter, false); var node; var result; while ((node = treeWalker.nextNode())) { diff --git a/src/section.js b/src/section.js index 1cb911a..f32d865 100644 --- a/src/section.js +++ b/src/section.js @@ -54,7 +54,7 @@ class Section { // var directory = new Url(this.url).directory; this.document = xml; - this.contents = xml.documentElement; + this.contents = xml.documentElement; return this.hooks.content.trigger(this.document, this); }.bind(this)) @@ -89,16 +89,16 @@ class Section { this.load(_request). then(function(contents){ - var serializer; + var userAgent = (typeof navigator !== 'undefined' && navigator.userAgent) || ''; + var isIE = userAgent.indexOf('Trident') >= 0; var Serializer; - - if (typeof XMLSerializer === "undefined") { + if (typeof XMLSerializer === "undefined" || isIE) { Serializer = require("xmldom").XMLSerializer; } else { Serializer = XMLSerializer; - } - serializer = new Serializer(); - this.output = serializer.serializeToString(contents); + } + var serializer = new Serializer(); + this.output = serializer.serializeToString(contents); return this.output; }.bind(this)). then(function(){ diff --git a/src/utils/request.js b/src/utils/request.js index c369b56..5114e88 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -101,7 +101,6 @@ function request(url, type, withCredentials, headers) { }); return deferred.promise; } - if(responseXML){ r = this.responseXML; } else