0

URLでウィンドウを開くgwt Javaコードプログラムがあります。

 Map<String, Object> ids = new HashMap<String, Object>();
                    ids.put("employeeId", UserToken.getCurrentUserToken().getEmployeeId());
                    createCaseUrl = ICMIntakeConstants.buildGrailsUrl(ICMIntakeConstants.CLIENT_APPLICATION_CONTROLLER, "", ids);
                    ICMWindow.open(createCaseUrl, "intake", "height=600,width=800,scrollbars=yes,resizable=yes,toolbar=no,directories=no,status=no,menubar=no", true);

なんらかの理由で 2 回呼び出されるコードの問題 (ただし、IE と chrome では処理されますが、Firefox では処理されません)。そのため、Firefox でのみウィンドウが 2 回ポップアップします。これを防ぐ方法を知る必要があります。ウィンドウの JSNI コードを変更しようとしていましたが、バックグラウンドがなく、調査を行ったときに単純なアラートが表示されなかったため、実際にデバッグしたり、何が起こっているのかを確認したりできませんでした。

/**
 * Defines all variable in JavaScript accessible by Java code and opens a new browser window
 * with the specified url, name and features.
 */
public static native void open(String url, String name, String features, boolean force) 
/*-{
  $wnd.alert("test2");
    var winRef;
    try {

        if (force)
        {


                 winRef = $wnd.open(url,name, features);

                  $wnd.alert("test1 force");
                  Alert.alert("clicked!");

        }
        else
        {
            $wnd.alert("test2");
             winRef = $wnd.open("",name, features);
             if(winRef.location == 'about:blank')
             {
                  winRef.location=url
             }
             else 
             {
                  if(!/Chrome[\/\s]/.test(navigator.userAgent))
                  {
                      winRef.alert("Please click Ok To Continue....");
                  }
             }
        }

        // Set focus to the opened window
        winRef.focus();

    } catch (err) {
    }         
}-*/;

JUNIT テストで open() メソッドを呼び出してみましたが、何もしませんでした...

コード全体を消去して $wnd.alert("test2"); を残したとしても、上記のコードが機能しないので、アラートをポップアップさせる方法を誰か教えてもらえますか? また、JSNIにwinrefが存在するかどうかを確認するにはどうすればよいですか?ウィンドウを開かないでください。助けてください。

または、開いているウィンドウに JavaScript コードのようなものを挿入する方法はありますか? これを解決する最善の方法は何ですか? ありがとう

4

1 に答える 1

0

閉じているかどうかを確認できるように、開いているウィンドウへの参照を維持する必要があります。ここに実際の例があります:

  private native Element open(String url, String name, String features) /*-{
    return $wnd.open(url, name, features);
  }-*/;

  private native boolean isOpen(Element win) /*-{
    return !! (win && !win.closed);
  }-*/;

  private native void close(Element win) /*-{
    if (win) win.close();
  }-*/;

  private native void focus(Element win) /*-{
    if (win) win.focus();
  }-*/;

  private Element win = null;

  public void onModuleLoad() {

    Button open = new Button("Open Win");
    Button close = new Button("Close Win");
    RootPanel.get().add(open);
    RootPanel.get().add(close);


    open.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        if (!isOpen(win)) {
          win = open("http://www.google.com", "myWin", "height=600,width=800,scrollbars=yes,resizable=yes,toolbar=no,directories=no,status=no,menubar=no");
        }
        focus(win);
      }
    });

    close.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        close(win);
      }
    });

  }
于 2012-11-23T14:01:00.727 に答える