diff --git a/src/providers/utils/dom.ts b/src/providers/utils/dom.ts
index 3e03e9d41..efc818100 100644
--- a/src/providers/utils/dom.ts
+++ b/src/providers/utils/dom.ts
@@ -35,6 +35,8 @@ export class CoreDomUtilsProvider {
'search', 'tel', 'text', 'time', 'url', 'week'];
protected INSTANCE_ID_ATTR_NAME = 'core-instance-id';
+ protected template = document.createElement('template'); // A template element to convert HTML to element.
+
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;
@@ -125,17 +127,15 @@ 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 {
- const element = document.createElement('div');
- element.innerHTML = html;
+ // Add a div to hold the content, that's the element that will be returned.
+ this.template.innerHTML = '
' + html + '
';
- return element;
+ return this.template.content.children[0];
}
/**
diff --git a/src/providers/utils/text.ts b/src/providers/utils/text.ts
index 7477db9ff..228a6e6bd 100644
--- a/src/providers/utils/text.ts
+++ b/src/providers/utils/text.ts
@@ -68,6 +68,8 @@ export class CoreTextUtilsProvider {
{old: /_mmaModWorkshop/g, new: '_AddonModWorkshop'},
];
+ protected template = document.createElement('template'); // A template element to convert HTML to element.
+
constructor(private translate: TranslateService, private langProvider: CoreLangProvider, private modalCtrl: ModalController) { }
/**
@@ -177,17 +179,15 @@ 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 {
- const element = document.createElement('div');
- element.innerHTML = html;
+ // Add a div to hold the content, that's the element that will be returned.
+ this.template.innerHTML = '' + html + '
';
- return element;
+ return this.template.content.children[0];
}
/**