在不更改 `src=` 的情况下重新加载 iFrame(同域)

Posted

技术标签:

【中文标题】在不更改 `src=` 的情况下重新加载 iFrame(同域)【英文标题】:Reload iFrame (same-domain) without changing `src=` 【发布时间】:2018-05-23 16:39:08 【问题描述】:

我正在动态创建 iframe ,它只包含内容(没有 src 属性)。

var iframe = document.createElement('iframe');
iframe.contentWindow.document.body.innerhtml=  my_page_content;  
....

但是,JS 脚本(my_page_content 内的 script src=".....")没有被加载,我必须重新加载脚本。

这些方法无法帮助我重新加载框架:

//this one emptyfies the iframe at all
iframeElement.src = iframeElement.src
//this one is not possible, because the `<script>` links are embedded in the content already.
var script = doc.createElement('script');  script.src = "jquery.min.js";
framebody.appendChild(script);

强制 iframe 在其 html 内容中加载包含的 scripts 的解决方案是什么?也许我以错误的方式附加内容?

【问题讨论】:

脚本是否在它们引用的 html 之后?可疑问题与加载事件有关。创建一个重现问题的minimal reproducible example @charlietfl ,谢谢,我现在找到了解决方案,并在下面发布了。 【参考方案1】:

我解决这个问题的唯一方法是使用write() 命令在 iframe 中写入正文:

var ifr = iframeElement.contentWindow.document;
ifr.open(); ifr.write("<body>"+ my_page_content +"</body>");    ifr.close();

appendChild().innerHTML 都没有帮助我。

【讨论】:

真的吗?如果可以的话,我认为你最好使用 write() 以外的其他东西,我的意思是不要 appendChild() ,不要 iframeElement.contentWindow.document.body.innerHTML=markeup @user10089632 他们都没有帮助

以上是关于在不更改 `src=` 的情况下重新加载 iFrame(同域)的主要内容,如果未能解决你的问题,请参考以下文章

在不重新加载 web 视图的情况下更改 html 文本颜色

如何在不重新加载页面的情况下更改 URL?

有啥方法可以在不重新加载的情况下更改标头 URL? [复制]

AngularJS UI 路由器 - 在不重新加载状态的情况下更改 url

如何在不重新加载的情况下更改浏览器栏网址

AngularJS:在不完全重新加载控制器的情况下更改哈希和路由