如何强制iFrame加载后重新加载

时间:2011-10-21 15:31:35

标签: javascript html iframe refresh reload

我有很多iframe在我的网页上加载特定内容。 parent和iframe都在同一个域中。

我在iframe中有一个滚动条似乎无法在所有浏览器中正确加载。但是当我刷新iframe时,它会加载完美。我不知道为什么会这样做。

我使用了元刷新,但是我不希望页面不断刷新,只需一次。

我正在寻找的解决方案将在iFrame打开后重新加载iFrame内容,延迟时间最短。

感谢您的时间和帮助!

-Brett

----------编辑:--------

我意识到我的页面会在加载索引时加载我的所有iframe。 iframe出现在jQuery覆盖中,它也被加载但可见性:隐藏直到被调用。因此,在此调用是我希望重新加载iframe的时候。

当我点击指向iFrame的链接时,有人可以帮我提出一个重新加载iFrame的Javascript函数吗?我已经接近但我对js一无所知,而且我一直在做空。我有一个重新加载页面的函数,但我无法弄清楚如何只调用一次。

到目前为止,我有这个:

<script type="text/javascript">

var pl;
var change;
pl=1;

function ifr() {

if (pl=1) {
    document.location.reload([true]);
    alert("Page Reloaded!");
    change=1;
    return change;
}

change+pl;

}

所以基本上它使用document.location.reload来重新加载页面。我试图将pl更改为1以外的其他内容,因此该函数不再运行。我一直用onLoad从身体上调用这个JS。

4 个答案:

答案 0 :(得分:8)

此处的所有潜在客户都已死亡,但我找到了一个有效的代码段。不是我写的,我不记得它来自哪里。只是张贴以帮助某人他们应该有同样的问题。

<div class="overlay-content"> //Content container needed for CSS Styling



     <div id="Reloader"> //iFrame will be reloaded into this div

     </div>



           //Script to reload the iframe when the page loads
         <script>
            function aboutReload() { 
              $("#Reloader").html('<iframe id="Reloader" height="355px" width="830px" scrolling="no" frameborder="0" src="about.html"></iframe>');
            }
         </script>



</div>

基本上只需在打开iFrame的窗口时加载iFrame源,而不是在加载原始页面时加载iFrame。

答案 1 :(得分:3)

除了原始问题的范围之外,这个jQuery snippit适用于跨域 iframe 元素,其中contentDocument.location.reload(true)方法不会因沙盒而导致。

//assumes 'this' is the iframe you want to reload.
$(this).replaceWith($(this).clone()); //Force a reload

基本上它用自身的副本替换整个iframe元素。我们正在使用它来强制调整嵌入式第三方“哑”小部件的大小,这些小部件就像视频播放器一样,当它们的尺寸发生变化时不会注意到。

答案 2 :(得分:2)

在iframe元素本身上,设置一个onload:

iframe.onload = function() {this.contentWindow.location.reload(); this.onload = null;};

(仅当iframe的位置与主页位于同一个域中时才有效)

答案 3 :(得分:2)

以下是原始问题的完整解决方案:

<iframe onload="reloadOnce(this)" src="test2.html"></iframe>
<script>
var iframeLoadCount = 0;
function reloadOnce(iframe) {
  iframeLoadCount ++;
  if (iframeLoadCount <= 1) {
    iframe.contentWindow.location.reload();
    console.log("reload()");
  }
}
</script>

更新的问题不是很清楚(什么是“iFrame的链接”以及它在你的代码片段中的位置?),但是您在代码中遇到了一些问题:

  • “使用onLoad从主体调用此JS”,假设您的意思是iframe的主体,意味着您希望用来避免无限重新加载的变量将在重新加载时与iframe页面的其余部分一起被破坏。您需要在iframe中加载稍微不同的URL(并在重新加载之前检查iframe的onload上的URL)或将flag变量放在外部页面中(并使用parent. variableName 访问它 - 这应该有效我认为)
  • if (pl=1) {应使用==,因为=始终是作业。
  • change+pl;无效。