2011-01-13 56 views
1

我想知道如何從載入gwt模塊的iframe的父級調用GWT靜態方法。從iframe的父級調用gwt靜態方法

舉一個簡單的例子假設我有以下GWT類:

public class Simple { 
    public static void showWindow() { 
     Window.alert("Hello from the iframe"); 
    } 
} 

我創建了一個名爲「iFrameHost.html」的HTML主頁,可以運行上面的功能。然後在不同的頁面上的無關GWT模塊我打電話:

Frame iFrame = new Frame("iFrameHost.html"); 
RootPanel.get().add(iFrame); 

如何我現在請從父頁面的showWindow()方法?

public static final native void setWindowFunction() /*-{ 
    $wnd.myFunction = [email protected]::showWindow(); 
}-*/; 
在iframe

,無論是在本地JavaScript方法或純JavaScript:

回答

2

這是基於吉普賽國王的回答是:

簡單類成爲:

public class Simple { 
    public static void showWindow() { 
     Window.alert("Hello from the iframe"); 
    } 
    public static final native void setWindowFunction() /*-{ 
     $wnd.jsniShowWindow = [email protected]::showWindow(); 
    }-*/; 
} 

然後從父HTML頁面調用的簡單類: 將IFrame的ID,並使用下面的方法:

private native void callShowWindow() /*-{ 
     $doc.getElementById("iFrameID").contentWindow.jsniShowWindow(); 
}-*/; 

你必須做出一定的iFrame的頁面已經被稱爲setWindowFunction(),但後你可以從父頁面調用callShowWindow()。

0
在簡單類

window.parent.myFunction(); 
+0

感謝您的回覆。這很接近,但不完全是我想要做的。我想從父頁面調用iFrame的方法,而不是來自iFrame的父頁面方法。我已經更新了我的問題,以顯示我如何嘗試使用您的代碼,但不幸的是,我在JavaScript中很弱,無法使其工作。 – 2011-01-13 14:36:54

+0

好吧,我已經調整了你的答案。 如果你想從父頁面調用函數給iframe一個id,然後調用: $ doc.getElementById(「iFrameID」)。contentWindow.myFunction(); – 2011-01-13 17:08:38