0

我有一个 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 之外的代码。我怎样才能做到这一点?

谢谢

4

2 回答 2

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获得相同的结果。

于 2012-05-26T19:26:45.010 回答
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>
于 2012-05-28T03:50:16.533 回答