Невозможно отобразить тело iframe с атрибутом srcdo c в Inte rnet Explorer - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь привязать iFrame из ответа API к div с идентификатором. Он не работает в IE. Я могу привязать iframe, но iframe не отображает необработанные HTML:

. html файл

<div id="div" ></div>

.ts файл

theIframe = "<iframe srcdoc=\"&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n    &lt;head&gt;\n        &lt;script src=&quot;https://code.jquery.com/jquery-2.2.4.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;\n        &lt;width=\"100%\" height=\"600px\" scrolling=\"no\" frameborder=\"0\"></iframe>"

document.getElementById('div').innerHTML = theIframe;

1 Ответ

0 голосов
/ 28 мая 2020

Работающим и лучшим способом будет запись в IFRAME через JS:

<div id="target"></div>
<script>
document.getElementById("target").innerHTML = "<iframe id=\"my-frame\" src=\"about:blank\"></iframe>";
var frame = document.getElementById("my-frame");
var fdoc = frame.contentDocument;
fdoc.write("<!doctype html><head></head><body>Here is some content.</body></html>");
</script>

Обратите внимание, что это будет работать в Firefox и Chrome, Inte rnet Explorer будет скорее всего, запросит всплывающее окно безопасности ActiveX, которое должно быть принято пользователем.


Использование srcdoc

Вам не нужно (лучше сказал: вам не разрешено) экранировать символы HTML в srcdoc, поскольку это укажет браузеру отобразить символы «<» или «>», а не интерпретировать их как начало и конец тега. Вам нужно будет декодировать / отключить их раньше (я использовал ответ Владимира из другого SO для обработки декодирования), а затем убедитесь, что вы преобразовали кавычки в одинарные кавычки. Также убедитесь, что ответ API возвращает правильный HTML, поскольку то, что вы разместили в своем комментарии, является неполным, а знак двойной кавычки отсутствует в теге srcdoc.

function htmlDecode(input) {
  var doc = new DOMParser().parseFromString(input, "text/html");
  return doc.documentElement.textContent;
}

let div = document.getElementById("div");
let response = '&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n &lt;head&gt;\n &lt;script src=&quot;code.jquery.com/jquery-2.2.4.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;\n&lt;head&gt;&lt;body&gt;Some content.&lt;/body&gt;&lt;html&gt;';
div.innerHTML = "<iframe src=\"about:blank\" srcdoc=\"" + htmlDecode(response).replace(/"/g, "'") +"\"></iframe>";
<div id="div">

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