2012-05-26 4 views
0

У меня есть html, скажем, A.html. Я вызываю A.html внутри A.html внутри IFRAME.Как получить доступ к кодам за пределами IFRAME в GWT?

A.html 
<html> 
..... 
    <IFRAME> 
    A.html (same domain, etc as A.html) 
    </IFRAME> 
</html> 

Это приложение GWT. Этот IFRAME является всплывающим окном, и когда пользователь закрывает (нажимает кнопку закрытия) это всплывающее окно (которое также загружает A.html, как вы можете видеть выше), я хочу, чтобы запускал событие для отображения некоторого сообщения на внешнем A .html, что означает, что мне нужен доступ к кодам вне IFRAME. Как я могу это достичь?

Благодаря

ответ

1

С вашего содержимого Iframe загружаются из того же домена, вы можете вызывать функции JavaScript на странице, содержащей. Я предполагаю, что вы просите о вызове кода вне iframe из GWT. Если да, то вы можете использовать JSNI.

Например, если метод JSNI:

private final native void postClosedEvent() 
/*-{ 
    $wnd.functionDefinedOutside(); 
}-*/  

Вы могли бы вызвать метод в пределах GWT ClickHandler:

closeButton.addClickHandler(new ClickHandler() 
          { 
           public void onClick(ClickEvent e) 
           { 
            postClosedEvent() 
           } 
          }); 

Это предполагает функцию, определенную с помощью JavaScript в содержащей страницы, например, :

<script type="text/javascript"> 
    var functionDefinedOutside = 
     function() 
     { 
      alert("GOT MESSAGE FROM iframe"); 
     }; 
</script> 

Примечание: Если содержимое iframe загружается из различных доменов, вы можете достичь того же результата, используя postMessage.

+0

Как functionDefinedOutside определен? – Mayumi

+0

@Mayumi: см. Правки для функцииDefinedOutside – pb2q

0

IFRAME в модуле GWT определяется как:

<iframe src="/temp.jsp"></iframe> 

GWT модуль (внешний класс):

public class Test implements EntryPoint { 

     public void onModuleLoad() { 
       registerMethod(); 
     } 

     private static native void registerMethod() /*-{ 
       $wnd.mt = $entry(@test.client.Test::show(Ljava/lang/String;)); 
      }-*/; 

     public static void show(String value){ 
       Window.alert("Calling from inside IFRAME " + value); 
     } 
    } 

JSP внутри IFRAME: temp.jsp

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title>temp</title> 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    <style type="text/css"> 
    </style> 
    </head> 
    <body> 
     <div id="content"> 
      Holla commo estas from the iframe!  
     </div> 

     <script type="text/javascript"> 
     window.alert("inside iframe"); 
     window.parent.mt("passing a value to a parent!!!"); 
     </script> 
    </body> 
</html> 
Смежные вопросы