diff --git a/src/ol/dom.js b/src/ol/dom.js index 94604f4ae3..bf3274686a 100644 --- a/src/ol/dom.js +++ b/src/ol/dom.js @@ -123,31 +123,26 @@ export function replaceChildren(node, children) { } } -let domImplementation_ = undefined; +let document_ = undefined; /** - * Register an external DOMImplementation. Can be used to supply a DOMImplementation - * in non-browser environments. + * Register a Document to use when creating nodes for XML serializations. Can be used + * to inject a Document where there is no globally available implementation. * - * @param {DOMImplementation} domImplementation A DOMImplementation. + * @param {Document} document A Document. * @api */ -export function registerDOMImplementation(domImplementation) { - domImplementation_ = domImplementation; +export function registerDocument(document) { + document_ = document; } -let document_ = undefined; - /** * Get a document that should be used when creating nodes for XML serializations. * @return {Document} The document. */ export function getDocument() { - if (document_ === undefined) { - if (!domImplementation_ && typeof document !== 'undefined') { - domImplementation_ = document.implementation; - } - document_ = domImplementation_.createDocument('', '', null); + if (document_ === undefined && typeof document !== 'undefined') { + document_ = document.implementation.createDocument('', '', null); } return document_; } diff --git a/src/ol/format/XMLFeature.js b/src/ol/format/XMLFeature.js index b0bed3b402..0f413e21c3 100644 --- a/src/ol/format/XMLFeature.js +++ b/src/ol/format/XMLFeature.js @@ -5,7 +5,7 @@ import {abstract} from '../util.js'; import {extend} from '../array.js'; import FeatureFormat from '../format/Feature.js'; import FormatType from '../format/FormatType.js'; -import {isDocument, parse} from '../xml.js'; +import {isDocument, parse, getXMLSerializer} from '../xml.js'; /** * @classdesc @@ -23,7 +23,7 @@ class XMLFeature extends FeatureFormat { * @type {XMLSerializer} * @private */ - this.xmlSerializer_ = new XMLSerializer(); + this.xmlSerializer_ = getXMLSerializer(); } /** diff --git a/src/ol/xml.js b/src/ol/xml.js index cee71100eb..27b2ee9e6f 100644 --- a/src/ol/xml.js +++ b/src/ol/xml.js @@ -486,3 +486,27 @@ export function pushSerializeAndPop(object, serializersNS, nodeFactory, values, serialize(serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this); return /** @type {O|undefined} */ (objectStack.pop()); } + +let xmlSerializer_ = undefined; + +/** + * Register a XMLSerializer. Can be used + * to inject a XMLSerializer where there is no globally available implementation. + * + * @param {XMLSerializer} xmlSerializer A XMLSerializer. + * @api + */ +export function registerXMLSerializer(xmlSerializer) { + xmlSerializer_ = xmlSerializer; +} + +/** + * Get a document that should be used when creating nodes for XML serializations. + * @return {XMLSerializer} The XMLSerializer. + */ +export function getXMLSerializer() { + if (xmlSerializer_ === undefined && typeof XMLSerializer !== 'undefined') { + xmlSerializer_ = new XMLSerializer(); + } + return xmlSerializer_; +}