2010-10-11 20 views
19

estoy desarrollando aplicaciones GWT y lo usopágina abierta GWT en una nueva pestaña

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

para abrir nueva página. Y se abre en una nueva pestaña cuando se llama, por ejemplo, directamente después de hacer clic en el botón. pero me decidí a hacer algunas validaciones en el servidor antes de abrir nueva página y coloca la llamada al antes mencionado método para la

public void onSuccess(Object response) { 
} 

y comienza a abrir las páginas en nueva ventana en lugar de nueva pestaña (esto sólo es cierto para Chrome, otros navegadores aún lo abren en una nueva pestaña).

¿Alguien me puede ayudar?


me construyeron un pequeño ejemplo para ilustrar el tema:

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", ""); 
       } 
      } 
      ); 
     } 
    }); 
  • Firefox (3.6.8) se abre ambas páginas en nuevas pestañas.
  • Chrome (6.0) abre "google.com" en la nueva pestaña y "bing.com" en la nueva ventana
  • Opera (10.10) se abre en pestañas nuevas.
  • IE (8.0) se abre tanto en Windows nuevo.

me marcó respuesta igorbel 's como los únicos cos correctos no he encontrado ninguna manera apropiada para especificar el mismo comportamiento en todas las situaciones.


+1

Esto de la pregunta fue útil para mí para aprender cómo abrir una nueva pestaña: com.google.gwt.user.client.Window.open (pageUrl, "_blank", ""); – cellepo

Respuesta

3

No estoy seguro de que pueda controlar esto de la manera que desee. El problema es que los navegadores pueden decidir cuándo abrir ventanas y cuándo abrir pestañas. Por ejemplo, firefox tiene la opción: "Abrir nuevas ventanas en pestañas nuevas". Y no olvide los navegadores que no admiten pestañas (sí, aún existen).

Dado que este es un aspecto tan problemático de la experiencia del usuario, mi recomendación sería reconsiderar su diseño. ¿Es realmente tan importante para su aplicación diferenciar entre abrir una nueva pestaña y abrir una nueva ventana?

0

Este código funciona para mí:

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

Lo interesante, cromo se abrirá la página en una nueva pestaña en caso de que si se pone window.open (...) la instrucción en el cuerpo de la aplicación del gestor de clics .

Por ejemplo:

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

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

        }); 

y una página se abrirá en la ventana separada en caso de que si voy a incluir cualquier asíncrono. solicitud en el código mencionado:

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

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

         } 

        }); 
20

Utilicé este código y funciona para mí en google chrome y mozilla firefox 3.6.8 navegadores Si desea abrir una página en una nueva ventana debe escribir código como

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

Si desea abrir una página en una nueva pestaña debe escribir código como

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

¿Puede proporcionar más información sobre el tercer parámetro? ¿Qué significa y cómo se usa? – RAS

+3

@RAS: ver https://developer.mozilla.org/en/DOM/window.open –

3

Este código funciona para mí:

  1. Antes de llamar al método Async, mantenga una referencia a una nueva ventana con parámetros vacíos.
  2. En el método onSuccess() establece la URL de la ventana.

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; 
}-*/; 

encontrar en: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/574b3b828271ba17

1

La forma Chrome lo mira, llamando Window.open() es como tratar de abrir una ventana emergente en la cara del usuario. Eso está mal visto y activará el bloqueador de pop-ups incorporado. Seguir un enlace, según Chrome, debería ser el resultado de que un usuario haga clic en una buena etiqueta de ancla antigua con un atributo href. Pero aquí está la respuesta que está buscando: puede mostrar un enlace al usuario y cambiar el destino del enlace sobre la marcha. Eso calificaría como un enlace "apropiado" en el mundo de Chrome.

Cuestiones relacionadas