我有一个包含iframe的页面。在iframe里面,我有一个像这样的javascript函数:
function putme() {}
如何在主页面上调用此功能?
答案 0 :(得分:9)
window.frames['frameName'].putme();
请注意,这通常仅在iframe引用同一域中的页面时才有效。出于安全原因,浏览器限制对属于不同域的帧内的页面进行访问。
答案 1 :(得分:3)
更强大:
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;
}
和
...
var el = document.getElementById('targetFrame');
var frame_win = getIframeWindow(el);
if (frame_win) {
frame_win.putme();
...
}
...
答案 2 :(得分:1)
如果iframe与外部页面位于不同的域中,则很难或根本不存在。
一般情况下,浏览器会阻止javascript访问来自其他域的代码,但是如果您控制这两个页面,则会有一些黑客可以使某些内容有效。或多或少。
例如,您可以从外部更改iFrame的URL片段,从iframe内部轮询片段并调用该函数。窗口名称有一个类似的技巧。
答案 3 :(得分:1)
在框架集上,指定框架的名称,在主页面中,您可以按给定名称访问框架:
窗口[FrameName] .putme();
答案 4 :(得分:0)
您可以使用其名称访问iframe:
foo.putme();
在iframe页面内全局声明的函数将成为该iframe的window对象的成员。您可以使用iframe的名称访问iframe的窗口对象。
为此,您的iframe需要具有名称属性:
<iframe name="foo" ...>
此外,主页面和iframe页面应该来自同一个域。
答案 5 :(得分:0)
为框架指定名称和ID - 两者完全相同。 window.frameNameOrId_.functionName()
这两个框架必须位于同一个域中(尽管有很多方法可以解决这个问题)
答案 6 :(得分:0)
这可以通过JavaScript完成:
window.top.location.href = url;
适用于所有主流浏览器。