我已经在stackoverflow上检查了来自另一个iframe帖子的所有重新加载iframe ...我已经尝试了所有他们的解决方案,但它似乎没有帮助我!所以我的问题是我在同一页面上有两个iframe。 iframe的源代码是互相交互的php文件,但我需要iframes重新加载,以便显示更改。我尝试了很多不同的方法(我将在下面列出)。这些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;
}
答案 0 :(得分:7)
如果您将name
分配给iframe
,大多数浏览器都会允许您通过iframe
值访问window
的{{1}}对象。这与通过name
属性引用iframe
不同,后者将为您提供对id
元素本身(来自其所有者iframe
)的引用,而不是{ {1}}的内容document
。
简单示例:(来自父文档)
iframe
让我们检查您的代码:
window
如果您使用正确的<iframe name='iframe1Name' id='iframe1Id'></iframe>
<script>
// option 1: get a reference to the iframe element:
var iframeElem = document.getElementById('iframe1Id');
// update the element's src:
iframeElem.src = "page.html";
// option 2: get a reference to the iframe's window object:
var iframeWindow = window.iframe1Name;
// update the iframe's location:
iframeWindow.location.href = "page.html";
</script>
,则可以在parent.document.getElementById(id).src = parent.document.getElementById(id).src;
内执行。您可能希望使用调试器来验证iframe
是否返回对正确元素的引用,并检查控制台以查看是否抛出任何异常(尝试按F12)。由于你没有发布你的完整代码(包括标记),我无法想到告诉你这里的问题是什么。
调试提示:
id
以确保您访问的是您认为自己的窗口,parent.document.getElementById(id)
以确保您获得了一个元素对象(而不是parent.location.href
或parent.document.getElementId(id)
),null
以确保您使用的是正确的ID(undefined
= =“IFRAME”)这一行:
parent.document.getElementById(id).tagName
有两个问题:
tagName
是parent.getElementById(id).location.reload();
的函数,但它是从getElementById()
调用的document
对象,parent
是window
对象的属性。您正在尝试访问不存在的location
元素的window
属性。您需要引用iframe
的{{1}},而不是其元素。 除location
方法外,还有其他方法可以获取iframe
的窗口对象:
window
name
iframe
如果更改document.getElementById('iframeId').contentWindow; // for supported browsers
元素的window.frames["iframeName"]; // assumes name property was set on the iframe
不适合您,则这些其他修补程序可能会:
window.frames[i]; // where i is the ordinal for the frame
或
src
或
iframe
或
parent.document.getElementById(id).contentWindow.location.reload();
警告:如果使用parent.frames["yourIframeName"].location.reload(); // requires iframe name attribute
方法,请注意不要使用parent.frames[0].location.reload(); // frames of immediate parent window
的公共值,例如“home”,因为它与名为top.frames[0].location.reload(); // frames of top-most parent window
的FireFox函数冲突因此,如果名为name
,Firefox将不会自动创建对iframe窗口的引用。最可靠的方法可能是使用name
因为我相信已经存在了很长时间(适用于FF / Chrome / Safari / IE6 +(至少))
在Chrome,FF和IE中测试了一个更深入(但非常小)的示例:
文件#1:frametest.html(父窗口)
home()
文件#2:frame1.html(第1帧的src)
home
文件#3:frame2.html(第2帧的src)
window.frames[]
此示例演示了如何按<!DOCTYPE html>
<html>
<body>
<iframe id="frame1Id" name="frame1Name" src="frame1.html"></iframe>
<iframe id="frame2Id" name="frame2Name" src="frame2.html"></iframe>
</body>
</html>
和<!DOCTYPE html>
<html>
<body>
FRAME 1
<script>
document.body.style.backgroundColor="#ccc";
setTimeout(function(){document.body.style.backgroundColor="#fff";},100);
document.write(new Date());
</script>
<input type="button" onclick="parent.document.getElementById('frame2Id').src=parent.document.getElementById('frame2Id').src;" value="Refresh frame 2 by ID"/>
<input type="button" onclick="parent.frame2Name.location.reload();" value="Refresh frame 2 by Name"/>
</body>
</html>
定义和操作<!DOCTYPE html>
<html>
<body>
FRAME 1
<script>
document.body.style.backgroundColor="#ccc";
setTimeout(function(){document.body.style.backgroundColor="#fff";},100);
document.write(new Date());
</script>
<input type="button" onclick="parent.document.getElementById('frame1Id').src=parent.document.getElementById('frame1Id').src;" value="Refresh frame 2 by ID"/>
<input type="button" onclick="parent.frame1Name.location.reload();" value="Refresh frame 2 by Name"/>
</body>
</html>
,以及如何在不同的iframe
内定义和操作id
。根据浏览器设置,原始政策可能适用,但您已经说过您的内容全部来自同一个域,因此您应该可以。