2009-11-02 38 views

回答

1

如果iframe與外部頁面位於不同的域中,很難或根本不存在。

一般來說,瀏覽器可以防止javascript訪問來自不同域的代碼,但是如果你控制了這兩個頁面,就會有一些黑客讓某些東西有用。或多或少。

例如,您可以從外部URL更改iFrame的URL片段,輪詢iframe中的片段並調用該函數。有一個與窗口名稱類似的技巧。

0

你可以用它的名稱來訪問的iframe:全局聲明的iframe頁面內將成爲該iframe窗口對象的成員

foo.putme(); 

功能。您可以使用iframe的名稱訪問iframe的窗口對象。

對於這個工作,你的iframe需要有一個name屬性:

<iframe name="foo" ...> 

此外,主面和iframe頁面應該是來自同一個域。

+1

我在firebug中調試它,它說:m.contentwindow.putmap不是一個函數 – jamal 2009-11-02 19:55:05

0

給框架一個名稱和一個id - 兩個相同。 window.frameNameOrId_.functionName()

兩個框架必須是同一個域(雖然這種情況有解決辦法有限度)

1

在框架,爲你的框架,並在主要頁面中指定的名稱你可以按給定名稱訪問該框架:

window。[FrameName] .putme();

8
window.frames['frameName'].putme(); 

請注意,這通常只適用於iframe指的是同一個域上的頁面。出於安全原因,瀏覽器限制對屬於不同域的幀內的頁面的訪問。

3

爲了獲得更大的魯棒性:完美在所有主要瀏覽器

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(); 
... 
0

這可以用JavaScript實現。