2010-10-11 108 views
19

GWT打开的页面中我开发GWT应用程序,我使用在新标签页

com.google.gwt.user.client.Window.open(pageUrl, "_blank", ""); 

打开新的一页。当它被调用时,它会在新标签页中打开,例如,在按钮点击后直接打开。 但我还是决定打开新页面之前,做服务器的一些验证,并放置在调用上述方法中提到的

public void onSuccess(Object response) { 
} 

,它开始打开新窗口,而不是新的标签页(这是唯一的真对于Chrome,其他浏览器仍然会在新标签中打开它)。

任何人都可以帮助我吗?


我建了一个小例子来说明这个问题:

button.addClickHandler(new ClickHandler() { 
     public void onClick(ClickEvent event) { 
      Window.open("http://www.google.com/", "_blank", ""); 
      MySampleApplicationServiceAsync serviceAsync = GWT.create(MySampleApplicationService.class); 
      serviceAsync.getMessage("Hello, Server!", new AsyncCallback() { 

       public void onFailure(Throwable caught) { 
        Window.alert("ERROR"); 
       } 

       public void onSuccess(Object result) { 
        Window.open("http://www.bing.com/", "_blank", ""); 
       } 
      } 
      ); 
     } 
    }); 
  • 火狐(3.6.8)将打开新的标签页都。
  • Chrome(6.0)在新标签页中打开“google.com”,在新窗口中打开“bing.com”
  • Opera(10.10)在新标签页中打开。
  • IE(8.0)在新窗口中打开。

标志着我igorbel的答案是唯一的正确因为我还没有找到指定在所有情况下相同的行为的任何适当的方式。


+1

这个问题对我学习如何打开一个新标签很有帮助: com.google.gwt.user.client.Window.open(pageUrl,“_blank”,“”); – cellepo 2014-05-28 23:03:03

回答

3

我不确定你能否按照你想要的方式来控制它。问题在于浏览器可以决定何时打开窗口以及何时打开制表符。例如,firefox可以选择:“改为在新标签中打开新窗口”。不要忘记不支持标签的浏览器(是的,这些标签仍然存在)。

由于这是用户体验的一个有问题的方面,我的建议是重新考虑您的设计。对于您的应用程序来说,打开一个新选项卡并打开一个新窗口是否真的非常重要?

0

此代码的工作对我来说:

public static native String getURL(String url)/*-{ 
return $wnd.open(url, 
'target=_blank') 
}-*/; 
2

有趣的事情, 镶边将在如果你把window.open情况下在新标签中打开页面(...)指令为点击处理程序实现的体。

例如:

Button someButton = new Button("test", 
        new ClickHandler() { 

         public void onClick(ClickEvent event) { 
          Window.open(...); 
         } 

        }); 

和页面将在单独的窗口的情况下,打开我是否会包括任何异步。要求进入上述代码:

Button someButton = new Button("test", 
        new ClickHandler() { 

         public void onClick(ClickEvent event) { 
          someService.doSomething(new AsyncCallback() { 
           void onSuccess(Object o) { 
            Window.open(...); 
           } 
           ... 
          }); 

         } 

        }); 
20

我用这段代码,它适用于我在谷歌铬和Mozilla Firefox 3.6。8个浏览器 如果你想在新窗口打开一个页面,你应该写代码

Window.open("www.google.com","_blank","enabled"); 

如果要打开新的标签页,你应该写代码

Window.open("www.google.com","_blank",""); 
+0

你能提供关于第三个参数的更多信息吗?这是什么意思?它是如何使用的? – RAS 2011-12-16 12:29:28

+3

@RAS:请参阅https://developer.mozilla.org/en/DOM/window.open – 2012-03-22 15:03:50

3

此代码工作对我来说:

  1. 在调用异步方法之前,请保留对带有空参数的新窗口的引用。
  2. 在onSuccess()方法中设置窗口的URL。

Button someButton = new Button("test"); 
SelectionListener<ButtonEvent> listener = new SelectionListener<ButtonEvent>() 
{ 
    public void componentSelected(ButtonEvent ce) 
    { 
     final JavaScriptObject window = newWindow("", "", ""); 

     someService.doSomething(new AsyncCallback() 
     { 
      public void onSuccess(Object o) 
      { 
       setWindowTarget(window, "http://www.google.com/"); 
      } 
     });    
    } 
} 
someButton.addSelectionListener(listener); 


private static native JavaScriptObject newWindow(String url, String name, String features)/*-{ 
    var window = $wnd.open(url, name, features); 
    return window; 
}-*/; 

private static native void setWindowTarget(JavaScriptObject window, String target)/*-{ 
    window.location = target; 
}-*/; 

找到在: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/574b3b828271ba17

1

的方式Chrome的看着它,调用Window.open()就像是试图打开用户的面部弹出窗口。这是不满的,并会触发内置的弹出窗口阻止程序。按照Chrome的说法,链接之后应该是用户点击具有href属性的优质旧锚定标记的结果。但是这里有你正在寻找的答案:你可以向用户显示一个链接并且即时改变链接目标。这将成为Chrome世界中的“适当”链接。