如何防止 iframe 在 DOM 中移动时重新加载

Posted

技术标签:

【中文标题】如何防止 iframe 在 DOM 中移动时重新加载【英文标题】:How to prevent an iframe from reloading when moving it in the DOM 【发布时间】:2011-11-18 01:16:21 【问题描述】:

我有一个加载了一些内容的 iframe。我想在不刷新的情况下将它移动到 DOM 中(我喜欢它里面的内容,我想保留它)。

我正在做一些基本的node.appendChild(iframe) 来完成这项工作。

这可能吗?

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

如果您想在视觉上移动它,您可以尝试修改 CSS 以使用绝对定位或其他一些调整。

但是,如果您尝试将其从 DOM 中实际拉出并插入到其他位置,您将无法避免重新加载。

【讨论】:

不,我不想在视觉上移动它。所以我害怕的是真实的。太糟糕了。 :'( 尚未跨浏览器测试;但看起来您可以在单个父节点内重新排列节点,包括 iframe,而无需使用insertBefore() 触发刷新。例如,iframe.parentNode.insertBefore(iframe, iframe.parentNode.firstChild);【参考方案2】:

我不这么认为,因为当 iframe 放回 DOM 时,浏览器会重新渲染/重新加载 iframe。

http://polisick.com/moveNode.php 更好地解释它。

要移动一个节点,您调用 removeNode 将其从树中取出并放入内存,然后 appendNode 将其“粘贴”回您想要的位置。

【讨论】:

我不想删除它并把它放回去。我只是想移动它。 它就是这样被移动的。与剪贴板相同。剪切/粘贴。 好的。看起来不是最佳的,但我不知道它是如何工作的......谢谢。【参考方案3】:

我在 jQueryUI 对话框中遇到了类似的 iFrame 问题。 jQuery 将 div(包含我的 iFrame)移出 DOM,因为我仍然想要回发(duh),所以我不得不将其移回。在阅读了这篇文章和其他几篇文章后,我想出了一个解决方案。

我注意到的一个简单想法是 iFrame 在移动时会重新加载。因此,在将 div 移回 DOM 后,我将 iFrame 添加到了对话框容器 (div) 中。这是因为 jQuery 不关心容器中的内容。下面是一些示例代码:

对话框打开/关闭函数:

打开:

function () 
    $(this).parent().appendTo("form").css("z-index", "9000"); //Move the div first
    $(this).append('<iframe id="iFrame" allowtransparency="true" frameborder="0"   src="somePage.aspx"></iframe>');, //then add the iframe

关闭:

function() 
    $(this).empty(); //clear the iframe out because it is added on open, 
    //if you don't clear it out, you will get multiple posts
    $(this).parent().appendTo("divHidden"); //move the dialog div back (good house-keeping)

html:

<div id="divHidden" style="display: none">
    <div id="dialog" style="display: none">
    </div>
</div>

【讨论】:

【参考方案4】:

您需要将“Html”节点保存在 iframe 下,并在移动 iframe 后将其添加回来

【讨论】:

以上是关于如何防止 iframe 在 DOM 中移动时重新加载的主要内容,如果未能解决你的问题,请参考以下文章

防止 iframe 内容在 firefox 中隐藏时重新加载

防止在回发时重新加载 iframe

如何在 DOM 中移动 iFrame 而不会丢失其状态?

Colorbox - 在颜色框内容中删除自定义 iframe 时防止父页面重新加载?

防止浏览器在重新加载父级时保留 iframe url

如何让 chrome 重新渲染 iframe