2011-01-13 6 views
1

gwt 모듈이로드 된 iframe의 부모로부터 GWT 정적 메소드를 호출하는 방법을 알고 싶습니다.iframe의 부모로부터 gwt 정적 메소드 호출하기

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

내가 위의 기능을 실행할 수 있습니다 "iFrameHost.html"라는 HTML 호스트 페이지를 만들 : 간단한 예를 들어

내가 다음 GWT 클래스가 있다고 가정합니다. 그런 다음 다른 페이지에 관련이없는 GWT 모듈에서 나는 전화 :

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

어떻게 지금 부모 페이지에서 showWindow() 메소드를 호출합니까? iframe이있는

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

하는 기본 자바 스크립트 방식 또는 순수 자바 스크립트 중 하나 : 간단한 클래스

답변

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 (호출 한 것이 확실하게해야합니다)하지만를 상위 HTML 페이지에서 callShowWindow()를 호출 할 수 있습니다.

+0

http://code.google.com/intl/de-AT/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#calling을 참조하십시오. $ entry (...)로 함수 참조를 래핑해야합니다. –

+0

@Malli 묻지 않음 아무도 귀하의 질문을 볼 수 없기 때문에 이전 게시물을 편집하여 질문합니다. 이 답변에 대한 링크가 포함 된 별도의 질문을 작성하고 Firefox에서 작동하지만 크롬에서는 작동하지 않는 이유를 묻습니다. – Pshemo

0

간단한

:

window.parent.myFunction(); 
+0

응답 해 주셔서 감사합니다. 가깝지만 정확히 내가하고 싶은 것은 아닙니다. 부모 페이지에서 iFrame의 메소드 대신 iFrame의 메소드를 호출하려고합니다. 귀하의 코드를 어떻게 사용했는지 보여주기 위해 제 질문을 업데이트했습니다. 그러나 불행히도 저는 JavaScript에서 약하며 제대로 작동하지 않습니다. –

+0

네, 답을 수정했습니다. 부모 페이지에서 함수를 호출하려면 iframe에 ID를 제공하고 다음을 호출하십시오. $ doc.getElementById ("iFrameID"). contentWindow.myFunction(); –

+0

@ 리차드 최종 솔루션을 사용하는 답변을 작성한 다음 동의 해 주시겠습니까? – marcog