Javascript 从单独的iframe重新加载iframe
我已经检查了stackoverflow上另一个iframe帖子中的所有重新加载iframe…我已经尝试了他们的所有解决方案,但似乎对我没有帮助!所以我的问题是在同一页上有两个iframe。iframe的源代码是相互交互的php文件,但是我需要iframe以这种方式重新加载更改。我尝试了许多不同的方法(我将在下面列出)。这些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
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。这绝对是一篇非常有资源的文章!它帮助我解决了问题,我从中学到了很多东西。谢谢:)