Обойти безопасность импорта HTML - PullRequest
0 голосов
/ 17 декабря 2018

Я импортирую HTML-фрагмент от третьей стороны и внедряю его в какой-то заполнитель вне моего приложения Angular 7.Есть одна ссылка, начинающаяся с javascript: внутри фрагмента, к которой будет добавляться unsafe: от Angular, что нарушает его функциональность.

DOMSanitizer Angular только кажется, что способ обойтибезопасность для строк HTML.Однако в приведенном ниже методе я просто читаю узел DOM и добавляю его в другое место назначения.Поэтому мне нужно иметь решение для узла DOM.

Согласно моим исследованиям, вставленные узлы в порядке сразу после вызова appendChild, но через несколько мс после этого Angular добавляет unsafe:.

Как я могу обойти защиту для узлов DOM?

 private insertPart(componentImportLinkId: string, targetSelector: string): void {
    try {
      const linkElement: any = document.getElementById(componentImportLinkId);
      const componentContent = linkElement.import;
      const componentTemplate = componentContent.querySelector('template');
      const importedComponentTemplateClone = document.importNode(componentTemplate.content, true);
      const appendToElement = document.querySelector(targetSelector);
      appendToElement.appendChild(importedComponentTemplateClone);
    } catch (e) {
      console.error(`PortalLayoutComponent.insertPart: Can not insert '${targetSelector}'`, e);
    }
  }

1 Ответ

0 голосов
/ 11 марта 2019

Вы можете получить строковое значение вашего DOM-узла, вызвав externalHTML () для componentTemplate

...