From ca31b58df060e86208866d4790622f6d02e469e1 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 10 Jul 2018 12:21:32 +0200 Subject: [PATCH] MOBILE-2465 dom: Revert DOMParser solution to parse HTML --- src/providers/utils/dom.ts | 13 ++----------- src/providers/utils/text.ts | 13 ++----------- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/src/providers/utils/dom.ts b/src/providers/utils/dom.ts index 99d6a0ccc..3e03e9d41 100644 --- a/src/providers/utils/dom.ts +++ b/src/providers/utils/dom.ts @@ -35,8 +35,6 @@ export class CoreDomUtilsProvider { 'search', 'tel', 'text', 'time', 'url', 'week']; protected INSTANCE_ID_ATTR_NAME = 'core-instance-id'; - protected parser = new DOMParser(); // Parser to treat HTML. - protected matchesFn: string; // Name of the "matches" function to use when simulating a closest call. protected instances: {[id: string]: any} = {}; // Store component/directive instances by id. protected lastInstanceId = 0; @@ -127,20 +125,13 @@ export class CoreDomUtilsProvider { /** * Convert some HTML as text into an HTMLElement. This HTML is put inside a div or a body. + * @todo: Try to use DOMParser or similar since this approach will send a request to all embedded media. + * We removed DOMParser solution because it isn't synchronous, document.body wasn't always loaded at start. * * @param {string} html Text to convert. * @return {HTMLElement} Element. */ convertToElement(html: string): HTMLElement { - if (this.parser) { - const doc = this.parser.parseFromString(html, 'text/html'); - - // Verify that the doc is valid. In some OS like Android 4.4 only XML parsing is supported, so doc is null. - if (doc) { - return doc.body; - } - } - const element = document.createElement('div'); element.innerHTML = html; diff --git a/src/providers/utils/text.ts b/src/providers/utils/text.ts index 7add3d34b..7477db9ff 100644 --- a/src/providers/utils/text.ts +++ b/src/providers/utils/text.ts @@ -68,8 +68,6 @@ export class CoreTextUtilsProvider { {old: /_mmaModWorkshop/g, new: '_AddonModWorkshop'}, ]; - protected parser = new DOMParser(); // Parser to treat HTML. - constructor(private translate: TranslateService, private langProvider: CoreLangProvider, private modalCtrl: ModalController) { } /** @@ -179,20 +177,13 @@ export class CoreTextUtilsProvider { /** * Convert some HTML as text into an HTMLElement. This HTML is put inside a div or a body. * This function is the same as in DomUtils, but we cannot use that one because of circular dependencies. + * @todo: Try to use DOMParser or similar since this approach will send a request to all embedded media. + * We removed DOMParser solution because it isn't synchronous, document.body wasn't always loaded at start. * * @param {string} html Text to convert. * @return {HTMLElement} Element. */ protected convertToElement(html: string): HTMLElement { - if (this.parser) { - const doc = this.parser.parseFromString(html, 'text/html'); - - // Verify that the doc is valid. In some OS like Android 4.4 only XML parsing is supported, so doc is null. - if (doc) { - return doc.body; - } - } - const element = document.createElement('div'); element.innerHTML = html;