0

私はA.htmlと言う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 にメッセージを表示するイベントを発生させたいと考えています。つまり、IFRAME 以外のコードにアクセスする必要があります。どうすればこれを達成できますか?

ありがとう

4

2 に答える 2

1

iframeのコンテンツは同じドメインから読み込まれているため、含まれているページでjavascript関数を呼び出すことができます。GWTからiframeの外部でコードを呼び出すことについて質問していると思います。その場合は、JSNIを使用できます。

たとえば、JSNIメソッドがあるとします。

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

GWTClickHandler内でメソッドを呼び出すことができます。

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 に答える