基本上,我在页面中嵌入了一个iframe,该iframe有一些需要从父页面调用的JavaScript例程。
现在相反的是相当简单,因为你只需要调用parent.functionName(),但不幸的是,我需要的恰恰相反。
请注意,我的问题不是改变iframe的源URL,而是调用iframe中定义的函数。
基本上,我在页面中嵌入了一个iframe,该iframe有一些需要从父页面调用的JavaScript例程。
现在相反的是相当简单,因为你只需要调用parent.functionName(),但不幸的是,我需要的恰恰相反。
请注意,我的问题不是改变iframe的源URL,而是调用iframe中定义的函数。
当前回答
同样的事情,但更简单的方法将是如何从iframe中的页面刷新父页面。 只需调用父页面的函数来调用javascript函数来重新加载页面:
window.location.reload();
或者直接从iframe中的页面执行此操作:
window.parent.location.reload();
这两个工作。
其他回答
下面是Nitin Bansal的回答
为了更健壮:
function getIframeWindow(iframe_object) {
var doc;
if (iframe_object.contentWindow) {
return iframe_object.contentWindow;
}
if (iframe_object.window) {
return iframe_object.window;
}
if (!doc && iframe_object.contentDocument) {
doc = iframe_object.contentDocument;
}
if (!doc && iframe_object.document) {
doc = iframe_object.document;
}
if (doc && doc.defaultView) {
return doc.defaultView;
}
if (doc && doc.parentWindow) {
return doc.parentWindow;
}
return undefined;
}
and
...
var el = document.getElementById('targetFrame');
var frame_win = getIframeWindow(el);
if (frame_win) {
frame_win.targetFunction();
...
}
...
继续JoelAnair的回答:
为了获得更强的健壮性,使用如下方法:
var el = document.getElementById('targetFrame');
if(el.contentWindow)
{
el.contentWindow.targetFunction();
}
else if(el.contentDocument)
{
el.contentDocument.targetFunction();
}
像魅力一样工作:)
如果你想从另一个函数生成的iframe中调用父节点上的JavaScript函数,例如shadowbox或lightbox。
你应该尝试使用窗口对象和调用父函数:
window.parent.targetFunction();
为了记录,我今天遇到了同样的问题,但这次页面嵌入在对象中,而不是iframe(因为它是XHTML 1.1文档)。下面是它如何处理对象:
document
.getElementById('targetFrame')
.contentDocument
.defaultView
.targetFunction();
(对不起,很难看的换行,不适合单行)
在IFRAME中,让你的函数对窗口对象是公共的:
window.myFunction = function(args) {
doStuff();
}
从父页面访问,使用这个:
var iframe = document.getElementById("iframeId");
iframe.contentWindow.myFunction(args);