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

问题描述 投票:4回答:4

我有许多iframe在页面上加载特定内容。父级和iframe都位于同一域中。

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

我使用了元刷新,该刷新有效,但我不希望页面仅一次刷新一次。

我正在寻找的解决方案将在打开iFrame之后以最小的延迟重新加载iFrame内容。


编辑

我意识到加载索引时,页面将加载所有iframe。 iframe出现在jQuery叠加层中,该叠加层也已加载但可见性:隐藏直到调用。因此,在此调用上是我希望重新加载iframe的时候。

[当我单击指向iFrame的链接时,有人可以帮我提出一个Javascript函数来重新加载iFrame吗?我已经很接近了,但是我对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。

javascript html iframe refresh reload
4个回答
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。


3
投票

超出原始问题的范围,但是此jQuery代码段适用于跨域iframe元素,其中contentDocument.location.reload(true)方法不会由于沙箱操作。

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

基本上,它将整个iframe元素替换为其自身的副本。我们正在使用它来强制调整嵌入式第三方“哑”窗口小部件的大小,例如视频播放器,它们在大小改变时不会注意到。


2
投票

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

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

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


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;无效。
© www.soinside.com 2019 - 2024. All rights reserved.