2011-02-07 15 views
12

Implemento muchas cosas usando el webViewClient como onUnhandledKeyEvent, shouldOverrideUrlLoading y más. Si desea agregar soporte para alertbox, entonces necesita cambiar a WebChromeClient, entonces no puedo hacer otras cosas. ¿Alguno sabe cómo mezclar ambos futuros?
tengo comprobar el código de cuadro de alerta javasript en http://lexandera.com/2009/01/adding-alert-support-to-a-webview/Android: ¿Cómo agregar compatibilidad con el cuadro de alerta de JavaScript en WebViewClient?


Gracias

+0

bueno rubi no puede entender que lo que la necesidad de u? –

+0

Quiero agregar javascript alertbox support a WebViewClient para no usar WebChromeClient? Si no entendió, publique el código –

Respuesta

25

Implementar el WebViewClient y WebChromeClient tanto como esto

webView = (WebView) findViewById(R.id.webview); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 

progressBar = new ProgressDialog(this); 
progressBar.setCancelable(true); 
progressBar.setMessage("Loading..."); 
progressBar.show(); 

final Context mapp = this; 

webView.setWebViewClient(new WebViewClient() { 

public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    Log.i("TEST", "Processing webview url click..."); 
    // to kill activity 
    view.loadUrl(url); 
    return true; 
} 

public void onPageFinished(WebView view, String url) { 
    Log.i("TEST", "Finished loading URL: " + url); 
    if (progressBar.isShowing()) { 
     progressBar.dismiss(); 
    } 
}........ 

luego implementar el WebChromeClient para javascript alert, confirm y rápido

webView.setWebChromeClient(new 
WebChromeClient() {    
@Override 
public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result) { 
    new AlertDialog.Builder(mapp) 
     .setTitle(R.string.title_dialog_alert) 
     .setMessage(message) 
     .setPositiveButton(android.R.string.ok, 
      new AlertDialog.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        result.confirm(); 
       } 
      }).setCancelable(false).create().show(); 

     return true; 
} 

@Override 
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { 
     new AlertDialog.Builder(mapp) 
     .setTitle(R.string.title_dialog_confirm) 
     .setMessage(message) 
     .setPositiveButton(android.R.string.ok, 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
       result.confirm(); 
      } 
     }).setNegativeButton(android.R.string.cancel, 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       result.cancel(); 
      } 
     }).create().show(); 
    return true; 
} 

@Override 
    public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) { 
      final LayoutInflater factory = LayoutInflater.from(mapp); 
      final View v = factory.inflate(R.layout.javascript_prompt_dialog, null); 

      ((TextView)v.findViewById(R.id.prompt_message_text)).setText(message); 
      ((EditText)v.findViewById(R.id.prompt_input_field)).setText(defaultValue); 

      new AlertDialog.Builder(mapp) 
       .setTitle(R.string.title_dialog_prompt) 
       .setView(v) 
       .setPositiveButton(android.R.string.ok, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int whichButton) { 
           String value = ((EditText)v.findViewById(R.id.prompt_input_field)).getText().toString(); 
           result.confirm(value); 
         } 
      }) 
      .setNegativeButton(android.R.string.cancel, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
           result.cancel(); 
         } 
      }) 
      .setOnCancelListener(
        new DialogInterface.OnCancelListener() { 
         public void onCancel(DialogInterface dialog) { 
           result.cancel(); 
         } 
      }) 
      .show(); 

      return true; 
     }; 

}); 

para más detalles, por favor echa un vistazo a http://code.google.com/p/mosembro/source/browse/trunk/src/com/lexandera/mosembro/Mosembro.java

+0

Awesome, thank you! –

+0

le he dado 2 días por eso –

+0

¡Todo funciona bien! Un detalle más: el cuadro de diálogo de confirmación debe ser no cancelable o con el oyente de cancelación de evento similar al aviso. De otra manera, congelará la vista web, ya que estaría esperando el resultado. – prcu

4

Si desea añadir el soporte para Alertbox continuación, tendrá que cambiar a WebChromeClient entonces no puedo hacer otras cosas.

Puede tener más de un objeto en la mayoría de los lenguajes de programación, incluido Java. Por lo tanto, tiene un WebViewClienty a WebChromeClient como objetos separados.

2

Usted es necesario configurar WebChromeClient (Este identificador Cuadros de diálogo de JavaScript, favicons, títulos y el progreso) para su WebView.

WebView wView = new WebView(this){ 
      @Override 
      public boolean onJsAlert(WebView view, String url, String message, 
        JsResult result) { 
       // TODO Auto-generated method stub 
       Log.i("my log","Alert box popped"); 
       return super.onJsAlert(view, url, message, result); 
      } 
}; 
setContentView(wView); 

wView.getSettings().setJavaScriptEnabled(true); 

WebChromeClient cClient = new WebChromeClient(); 
wView.setWebChromeClient(cClient); 

wView.loadUrl("file:///android_asset/" + yourHtmlFile); 

espero que ayude :)

+0

¡Exactamente lo que quería! Gracias. No estaba al tanto al implementarlo para mostrar jsStuff. – Ayyappa

0
WebView wView = new WebView(this){ 
      @Override 
      public boolean onJsAlert(WebView view, String url, String message, 
        JsResult result) { 
       // TODO Auto-generated method stub 
       Log.i("my log","Alert box popped"); 
       return super.onJsAlert(view, url, message, result); 
      } 
}; 
setContentView(wView); 

wView.getSettings().**strong text**setJavaScriptEnabled(true); 

WebChromeClient cClient = new WebChromeClient(); 
wView.setWebChromeClient(cClient); 

wView.loadUrl("file:///android_asset/" + yourHtmlFile); 
+0

¿Puedes explicar un poco más? –

Cuestiones relacionadas