Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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重新加载iframe_Javascript_Iframe_Parent_Reload - Fatal编程技术网

Javascript 从单独的iframe重新加载iframe

Javascript 从单独的iframe重新加载iframe,javascript,iframe,parent,reload,Javascript,Iframe,Parent,Reload,我已经检查了stackoverflow上另一个iframe帖子中的所有重新加载iframe…我已经尝试了他们的所有解决方案,但似乎对我没有帮助!所以我的问题是在同一页上有两个iframe。iframe的源代码是相互交互的php文件,但是我需要iframe以这种方式重新加载更改。我尝试了许多不同的方法(我将在下面列出)。这些iFrame来自同一个域。也许是别的什么把事情搞砸了?提前谢谢 从一个iframe内部调用的不同语句: parent.document.getElementById(id).s

我已经检查了stackoverflow上另一个iframe帖子中的所有重新加载iframe…我已经尝试了他们的所有解决方案,但似乎对我没有帮助!所以我的问题是在同一页上有两个iframe。iframe的源代码是相互交互的php文件,但是我需要iframe以这种方式重新加载更改。我尝试了许多不同的方法(我将在下面列出)。这些iFrame来自同一个域。也许是别的什么把事情搞砸了?提前谢谢

从一个iframe内部调用的不同语句:

parent.document.getElementById(id).src = parent.document.getElementById(id).src;
parent.getElementById(id).location.reload();
尝试调用在父窗口中工作的父函数:

内部iframe-

parent.refresh(id);
父窗口工作函数-

function refresh(id) {
document.getElementById(id).src = document.getElementById(id).src;
}

如果将
name
指定给
iframe
大多数浏览器将允许您通过
name
值访问
iframe
窗口
对象。这不同于通过其
id
属性引用
iframe
,该属性将为您提供对
iframe
元素本身的引用(来自其所有者
文档
),而不是对
iframe
的内容
窗口的引用

简单示例:(来自父文档)

如果使用正确的
id
,则从
iframe
中执行此操作即可。您可能需要使用调试器来验证
parent.document.getElementById(id)
是否返回对正确元素的引用,并检查控制台以查看是否引发了任何异常(尝试点击F12)。因为您没有发布完整的代码(包括标记),所以我想不出这里有什么问题

调试提示:

  • 检查
    parent.location.href
    以确保您正在访问您认为是的窗口
  • 检查
    parent.document.getElementId(id)
    以确保获得元素对象(与
    null
    未定义的
    相反)
  • 检查
    parent.document.getElementById(id).tagName
    以确保您使用的是正确的id(
    标记名
    应==“IFRAME”)
此行:

parent.document.getElementById(id).src = parent.document.getElementById(id).src;
parent.getElementById(id).location.reload();
有两个问题:

  • getElementById()
    文档
    的一个函数,但它是从
    父对象调用的,父对象是
    窗口
    对象,并且
  • 位置
    窗口
    对象的属性。您正在尝试访问
    iframe
    元素的
    位置
    属性,该属性不存在。您需要对
    iframe
    窗口的引用,而不是对其元素的引用
  • 除了
    name
    方法之外,还有其他方法可以获取
    iframe
    的窗口对象:

    parent.document.getElementById(id).src = parent.document.getElementById(id).src;
    
    parent.getElementById(id).location.reload();
    
  • document.getElementById('iframeId').contentWindow;//对于支持的浏览器
  • window.frames[“iframeName”];//假定已在iframe上设置了name属性
  • window.frames[i];//其中i是框架的序号
  • 如果更改
    iframe
    元素的
    src
    对您不起作用,这些其他修复可能:

    parent.document.getElementById(id).contentWindow.location.reload()

    parent.frames[“yourIframeName”].location.reload();//需要iframe name属性

    parent.frames[0]。location.reload();//直接父窗口的帧

    top.frames[0]。location.reload();//最顶端父窗口的框架

    警告:如果使用
    name
    方法,请小心不要使用
    name
    的公共值,例如“home”,因为它与名为
    home()
    的FireFox函数冲突,因此如果iframe的窗口名为
    home
    ,FireFox不会自动创建对它的引用。最可靠的方法可能是使用
    window.frames[]
    ,因为我相信这已经存在很长时间了(至少在FF/Chrome/Safari/IE6+中有效))

    下面是一个更深入(但非常简单)的示例,在Chrome、FF和IE中进行了测试:

    parent.document.getElementById(id).src = parent.document.getElementById(id).src;
    
    parent.getElementById(id).location.reload();
    
    文件#1:frametest.html(父窗口)

    
    
    文件2:frame1.html(frame1的src)

    
    第1帧
    document.body.style.backgroundColor=“#ccc”;
    setTimeout(函数(){document.body.style.backgroundColor=“#fff”;},100);
    文件。写入(新日期());
    
    文件#3:frame2.html(frame2的src)

    
    第1帧
    document.body.style.backgroundColor=“#ccc”;
    setTimeout(函数(){document.body.style.backgroundColor=“#fff”;},100);
    文件。写入(新日期());
    

    此示例演示如何通过
    id
    name
    定义和操作
    iframe
    ,以及如何从不同的
    iframe
    中影响一个
    iframe
    。根据浏览器设置,可能会应用源代码策略,但您已经说过,您的内容都来自同一个域,因此您应该在该域中没有问题。

    这两个iFrame是否与您的php脚本来自同一个域?您不能更改其他域iframe。是的,它们是。很抱歉,我忘了包括这一点。如果在第一个iframe完成后手动从控制台运行刷新(“idString”)会发生什么?另外,iframe是否有嵌套的可能?就像一个iframe在另一个iframe中一样?当从父窗口运行iframe时,刷新(id)工作并刷新iframe,而不是从子iframe运行iframe。这绝对是一篇非常有资源的文章!它帮助我解决了问题,我从中学到了很多东西。谢谢:)