Я анализирую строку html через createContextualFragment
:
let DocumentFragmentDom = IframeDocument.createRange().createContextualFragment(this.Html);
И я пытаюсь добавить каждый узел отдельно к моему ifame следующим образом:
while(DocumentFragmentDom.children.length > 0) {
if(DocumentFragmentDom.children[0].nodeName.toLowerCase() === "script" &&
DocumentFragmentDom.children[0].hasAttribute("src"))
{
DocumentFragmentDom.children[0].addEventListener("load",RecursiveAppending.bind(this));
IframeDocument.body.appendChild(DocumentFragmentDom.children[0]);
return;
}
IframeDocument.body.appendChild(DocumentFragmentDom.children[0]);
}
вы можете видеть, что если узел является тегом скрипта с атрибутом src
, я добавлю eventlistener
для события загрузки, а обратный вызов - та же функция, поэтому я делаю это потому, что если у меня есть теги html code 2, один из которых использует внешний ресурс, а другой - встроенный, если я не буду ждать события загрузки для внешнего тега, встроенный будет выполняться до него, даже если встроенный тег находится ниже внешнего .
С этим кодом все работает отлично, но я хотел бы иметь возможность добавлять отдельные узлы, и когда узел имеет children
, я хотел бы сначала добавить родительский узел, а затем каждый дочерний узел, и если children
имеет children
Я бы хотел продолжить это.
Мне также нужно принять во внимание eventlistener
для тега script, потому что, если я сталкиваюсь с тегом script с src
, мне нужно использовать обратный вызов и прекратить добавление до тех пор, пока событие не будет запущено, и затем мне нужно продолжить в точно такая же точка.
еще одна вещь, которую следует учитывать, - когда вы добавляете узел из documentfragment
в другой документ, узел будет перемещен из documentfragment
в новый документ, поэтому я не уверен, как именно я должен это сделать, возможно, клонировать каждый узел?