diff --git a/src/lib/svg_text_utils.js b/src/lib/svg_text_utils.js index f6d4419dc0c..d1544c1a359 100644 --- a/src/lib/svg_text_utils.js +++ b/src/lib/svg_text_utils.js @@ -17,6 +17,17 @@ var Lib = require('../lib'); var xmlnsNamespaces = require('../constants/xmlns_namespaces'); var stringMappings = require('../constants/string_mappings'); +exports.getDOMParser = function() { + if(exports.domParser) { + return exports.domParser; + } else if(window.DOMParser) { + exports.domParser = new window.DOMParser(); + return exports.domParser; + } else { + throw new Error('Cannot initialize DOMParser'); + } +}; + // Append SVG d3.selection.prototype.appendSVG = function(_svgString) { @@ -27,8 +38,9 @@ d3.selection.prototype.appendSVG = function(_svgString) { '' ].join(''); - var dom = new DOMParser().parseFromString(skeleton, 'application/xml'), - childNode = dom.documentElement.firstChild; + var domParser = exports.getDOMParser(); + var dom = domParser.parseFromString(skeleton, 'application/xml'); + var childNode = dom.documentElement.firstChild; while(childNode) { this.node().appendChild(this.node().ownerDocument.importNode(childNode, true));