Indice dei tutorials: http://gheryd.blogspot.com/2011/06/javascript-gwt-tutorials.html
english version
Ho avuto l'esigenza di verificare se il browser in cui girava la mia applicazione gwt, avesse attivo il blocco dei popup.
Spulciando un po' in giro ho trovato del codice javascript che ho utilizzato in una classe jsni gwt .
Ho inserito il codice javascript dentro dei native methods. Il sistema e' un po' rozzo ma funzionante (per ora l'ho solo testato su Chrome, eventualmente si può migliorare dentro i native methods).
La classe ha solo metodi statici ed è sufficiente avviare la rilevazione (detect) nel seguente maniera:
E' possibile così sapere se c'è un blocco pupup:
english version
Ho avuto l'esigenza di verificare se il browser in cui girava la mia applicazione gwt, avesse attivo il blocco dei popup.
Spulciando un po' in giro ho trovato del codice javascript che ho utilizzato in una classe jsni gwt .
Ho inserito il codice javascript dentro dei native methods. Il sistema e' un po' rozzo ma funzionante (per ora l'ho solo testato su Chrome, eventualmente si può migliorare dentro i native methods).
La classe ha solo metodi statici ed è sufficiente avviare la rilevazione (detect) nel seguente maniera:
PopupBlockerController.detect();Dopo 4 secondi (periodMillis) viene verificato se il il popup è stato correttamente aperto.
E' possibile così sapere se c'è un blocco pupup:
if( PopupBlockerController.isPopupBlocked() ) { Window.alert("popup bloccati"); }La cosa migliore sarebbe avere un handler che viene chiamato quando i 4 secondi sono passati, ma purtroppo per ora non ho avuto il tempo. Dimenticavo una cosa importante, occorre creare un file html "popuptest.html" con il seguente codice:
popuptest.html
<!DOCTYPE html PUBLIC PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"; > <head> <title>Popup test</title> <script type="text/javascript" language="Javascript"> function test() { return window.innerHeight!=0; } </script> </head> <body>DETECT POPUP BLOCKER</body> </html>Questo html viene mostrato nel popup che il PopupBlockerController cercherà di aprire e contiene la funzione javascript test() che verrà richiamata dopo 4 secondi.
public class PopupBlockerController { private final static int periodMillis = 4000; public static void detect() { startPopupBlockerDetection(); timer.schedule(periodMillis); } private static Timer timer = new Timer() { @Override public void run() { if( !isPopupBlocked() ) { checkTestPopup(); } } }; public static boolean isPopupBlocked() { return isPopupBlockedNative(); } private static native boolean isPopupBlockedNative() /*-{ return $wnd.popUpsBlocked; }-*/; private static native void startPopupBlockerDetection() /*-{ $wnd.popUpsBlocked = false; $wnd.testPopup = $wnd.open('popuptest.html', 'popuptest', 'width=1px,height=1px,left=0,top=0,scrollbars=no'); if( !$wnd.testPopup || $wnd.testPopup.closed || typeof $wnd.testPopup.closed=='undefined' ) { $wnd.popUpsBlocked = true if($wnd.testPopup) $wnd.testPopup.close(); } else { $wnd.popUpsBlocked = false; } }-*/; private static native void checkTestPopup() /*-{ if($wnd.testPopup) { if( $wnd.testPopup.test( )) { $wnd.popUpsBlocked = false; } else { $wnd.popUpsBlocked = true; } $wnd.testPopup.close(); } }-*/; }