Заменить документ IFrame ссылкой на глобальный документ - PullRequest
0 голосов
/ 15 апреля 2020

Мне нужно создать модал с некоторым содержимым, у которого есть CSS, который нарушает стиль основного документа, поэтому я решил «поместить в песочницу» содержимое модалов, сделав его iframe для нового документа. Чтобы загрузить модальную спецификацию c css только один раз, я хочу повторно использовать для всех модалов один и тот же документ и заменить только тело.

Моя проблема: я использовал этот код, чтобы поместить глобальный документ в IFrame (лишенный возможности содержать только соответствующие части):

window.newdoc = document.implementation.createHTMLDocument("Menu");
let iframe = document.createElement("iframe");
iframe.src = 'about:blank';
iframe.onload = () => {
    let node = iframe.contentDocument.importNode(newdoc.documentElement, true);
    iframe.contentDocument.replaceChild(node, iframe.contentDocument.documentElement);
}

Проблема в том, что он использует importNode это клонирует мой документ. Вместо этого я хочу использовать ссылку на глобальный документ, чтобы, если я сделаю newdoc.body.innerHTML = "some html"; позже, он также обновил документ в iframe. Я уже попробовал следующее:

iframe.onload = () => {
    iframe.contentDocument.documentElement = newdoc.documentElement;
}
// And
iframe.onload = () => {
    iframe.contentDocument = newdoc;
}

Ни сработало. Есть ли способ сделать это? Я думал об использовании, возможно, MutationObserver для каждого IFrame, но он не был бы так оптимизирован, как непосредственное использование ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...