3

こんにちは私は次のコードを持っています:

    button.addClickHandler( new ClickHandler( ) {
        @Override   
        public void onClick( ClickEvent event ) {    
             Call 1 --> Window.open( publicBookingUrl, "_blank", null );                
            dispatcher.execute( new HasServicesAction(true), 
                    new ActionCallback<SomeResult>( ){       
                @Override 
                public void onSuccess( SomeResult result ) {
             Call 2 --> Window.open( publicBookingUrl, "_blank", null );
                } 
            });  
        }        
    });

Call 1では、ポップアップブロッカーはポップアップが開くのをブロックしません。新しいタブまたは新しいウィンドウでウィンドウが正常に開きます。ただし、Call2では、ポップアップブロッカーがポップアップを防止するため、ユーザーはポップアップを明示的に有効にする必要があります。この背後にある理由を説明する投稿を見つけました:https ://groups.google.com/forum/?fromgroups =#!topic / google-web-toolkit / V0s7goJxuhc 残念ながら、このソリューションは私には機能しません。

なぜこれが当てはまるのか誰かが知っていますか?どうすればこれを回避できますか?

前もって感謝します。

4

2 に答える 2

5

リンクしたページが示すように、ウィンドウは直接のユーザーアクションの結果としてのみ開くことができます。これを回避するには、RPC呼び出しの前にウィンドウを開き、RPC呼び出しが戻った後にウィンドウのURLを設定します。GWTのビルトインWindowは、基になるオブジェクトのすべてのプロパティを公開するわけではないwindowため、カスタム実装が必要です。

public class MyWindow extends JavaScriptObject {
  // All types that extend JavaScriptObject must have a protected,
  // no-args constructor. 
  protected MyWindow() {}

  public static native MyWindow open(String url, String target, String options) /*-{
    return $wnd.open(url, target, options);
  }-*/;

  public native void close() /*-{
    this.close();
  }-*/;

  public native void setUrl(String url) /*-{
    if (this.location) {
      this.location = url;
    }
  }-*/;
}

次に、クリックハンドラーで:

public void onClick(ClickEvent event) {
  final MyWindow window = MyWindow.open(null, "_blank", null);

  dispatcher.execute(new HasServicesAction(true), 
      new ActionCallback<SomeResult>( ){       
        @Override 
        public void onSuccess(SomeResult result) {
          if (result.isGood()) {
            window.setUrl(publicBookingUrl);
          } else {
            window.close();
          }
        }
      });  
}

を呼び出して開いているウィンドウの原点setUrl()を変更した場合、後でプロパティを変更したり、関数を呼び出したりすることはできません。

于 2012-11-07T23:42:42.713 に答える
-2

ウィンドウポップアップを取り除きます。代わりにPopupDialogを使用してください。

ユーザーがポップアップを無効にし、それを表示する方法を見つけた場合、このユーザーはあなたについてどう思いますか?

于 2012-11-07T23:46:00.160 に答える