Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何强制iFrame在加载后重新加载_Javascript_Html_Iframe_Refresh_Reload - Fatal编程技术网

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

Javascript 如何强制iFrame在加载后重新加载,javascript,html,iframe,refresh,reload,Javascript,Html,Iframe,Refresh,Reload,我有许多iFrame在我的页面上加载特定内容。父级和iframe都在同一个域上 我在iframe中有一个滚动条,它似乎不能在所有浏览器中正确加载。但是,当我刷新iframe时,它会加载得非常完美。我不知道它为什么会这样 我使用了meta刷新,它可以工作,但我不希望页面不断刷新,只刷新一次 我正在寻找的解决方案将在打开iFrame后重新加载iFrame内容,并且延迟最小 编辑 我意识到在加载索引时,我的页面会加载所有的iFrame。iFrame显示在jQuery覆盖中,该覆盖也已加载,但可见性:

我有许多iFrame在我的页面上加载特定内容。父级和iframe都在同一个域上

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

我使用了meta刷新,它可以工作,但我不希望页面不断刷新,只刷新一次

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


编辑 我意识到在加载索引时,我的页面会加载所有的iFrame。iFrame显示在jQuery覆盖中,该覆盖也已加载,但可见性:在调用之前隐藏。所以在这个调用中,我希望重新加载iframe

有谁能帮我想出一个Javascript函数,当我点击iFrame的链接时重新加载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;

}

var-pl;
var变化;
pl=1;
函数ifr(){
如果(pl=1){
document.location.reload([true]);
警报(“页面已重新加载!”);
变化=1;
回报变化;
}
变更+损益;
}


因此,基本上它使用document.location.reload来重新加载页面。然后我尝试将pl更改为1以外的值,这样函数就不会再次运行。我一直在用onLoad从body调用这个JS。

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

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

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

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

<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>

var iframeLoadCount=0;
函数重载一次(iframe){
iframeLoadCount++;

如果(iframeLoadCount这方面的所有线索都消失了,但我确实找到了一个有效的代码段。不是我写的,我也不记得它来自何处。如果有人有同样的问题,我只是发帖帮助他们

<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>
//CSS样式设置所需的内容容器
//iFrame将重新加载到此div中
//加载页面时重新加载iframe的脚本
函数aboutReload(){
$(“#重新加载程序”).html(“”);
}

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

超出了原始问题的范围,但是这个jQuery snippit适用于跨域iFrame元素,其中contentDocument.location.reload(true)方法由于沙盒而无法使用

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

基本上,它用自身的副本替换了整个iframe元素。我们使用它来强制调整嵌入的第三方“dumb”的大小像视频播放器这样的小部件,当它们的大小改变时不会注意到。我建议在事件处理程序中使用
this
而不是
iframe
,以防变量
iframe
被覆盖。这一点很好。将进行编辑。(我习惯了很多闭包,所以变量名不太可能被覆盖:p)感谢大家的快速回复!iframe加载about.html,父对象是index.php。我是否将此代码放在about.html的头中的内部标记中?@Brett:在父页面中。这个答案并没有真正明确说明将其放在何处,因为要设置iframe.onload,您必须等到iframe在DOM中,但如果您等待父对象的“加载”事件时,iframe可能已加载,也可能已加载。一个未经测试的想法是放入HTML;让reloadOnce函数检查一个标志,然后如果未设置,则设置它并重新加载框架。让我尝试清除“指向iframe的链接”…当访问者单击指向其他内容的链接时,例如“关于”页面中,附加内容通过iFrame显示。因此“iFrame链接”将是“关于”页面上的任何链接(即“关于我”、“关于你”、“常见问题解答”等)…这些附加页面是使用iFrame的。所有iFrame都是在首次访问index.php页面时加载的。但是,当通过单击它们各自的链接调用时,我需要它们进行刷新。我将尝试此解决方案。感谢您在这个问题上花费的时间!我尝试输入您的代码,但没有成功。我是否实现了此更正y?
code
code-var-iframeLoadCount=0;函数重载一次(iframe){iframeLoadCount++;if(iframeLoadCount)这对我有效-我在iframe的正上方添加了脚本,然后添加了onload属性。效果非常好!