如何在GWT中访问IFRAME之外的代码?

时间:2012-05-26 19:15:43

标签: gwt iframe

我有一个HTML,比如A.html。我在IFRAME中调用A.html里面的A.html。

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

这是一款GWT应用。这个IFRAME是一个弹出窗口,当用户关闭(点击关闭按钮)这个弹出窗口(也可以加载A.html,如上所示),我想要 触发事件以在外部A.html上显示一些消息,这意味着我需要访问IFRAME之外的代码。我怎样才能做到这一点?

由于

2 个答案:

答案 0 :(得分:1)

由于您的iframe内容是从同一个域加载的,因此您可以在包含页面上调用javascript函数。我假设您要求从GWT调用iframe之外的代码。如果是这样,那么你可以使用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获得相同的结果。

答案 1 :(得分:0)

GWT模块中的IFRAME定义为:

<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);
        }  
    }

IFRAME中的JSP: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>