我有一個帶有iframe的頁面。在iframe裏面我有一個這樣的javascript函數:從iframe外部調用iframe中的函數
function putme() {}
如何在主頁面上調用此函數?
我有一個帶有iframe的頁面。在iframe裏面我有一個這樣的javascript函數:從iframe外部調用iframe中的函數
function putme() {}
如何在主頁面上調用此函數?
如果iframe與外部頁面位於不同的域中,很難或根本不存在。
一般來說,瀏覽器可以防止javascript訪問來自不同域的代碼,但是如果你控制了這兩個頁面,就會有一些黑客讓某些東西有用。或多或少。
例如,您可以從外部URL更改iFrame的URL片段,輪詢iframe中的片段並調用該函數。有一個與窗口名稱類似的技巧。
你可以用它的名稱來訪問的iframe:全局聲明的iframe頁面內將成爲該iframe窗口對象的成員
foo.putme();
功能。您可以使用iframe的名稱訪問iframe的窗口對象。
對於這個工作,你的iframe需要有一個name屬性:
<iframe name="foo" ...>
此外,主面和iframe頁面應該是來自同一個域。
給框架一個名稱和一個id - 兩個相同。 window.frameNameOrId_.functionName()
兩個框架必須是同一個域(雖然這種情況有解決辦法有限度)
在框架,爲你的框架,並在主要頁面中指定的名稱你可以按給定名稱訪問該框架:
window。[FrameName] .putme();
window.frames['frameName'].putme();
請注意,這通常只適用於iframe指的是同一個域上的頁面。出於安全原因,瀏覽器限制對屬於不同域的幀內的頁面的訪問。
爲了獲得更大的魯棒性:完美在所有主要瀏覽器
window.top.location.href = url;
作品:
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');
getIframeWindow(el).putme();
...
這可以用JavaScript實現。
我在firebug中調試它,它說:m.contentwindow.putmap不是一個函數 – jamal 2009-11-02 19:55:05