2011-02-07 12 views
12

Wdrażam wiele rzeczy za pomocą webViewClient, takich jak onUnhandledKeyEvent, shouldOverrideUrlLoading i więcej. Jeśli chcesz dodać obsługę alertbox, musisz przejść do WebChromeClient, a ja nie mogę robić innych rzeczy. Ktoś wie, jak połączyć obie te przyszłości?
muszę sprawdzić kod obsługi JavaScript oknie alertu na http://lexandera.com/2009/01/adding-alert-support-to-a-webview/Android: Jak dodać obsługę alertu javascript w WebViewClient?


Dziękuję

+0

hej Rubi mogę zrozumieć, niż to, co u potrzeba? –

+0

Chcę dodać obsługę alertów javascript do WebViewClient, aby nie używać WebChromeClient? Jeśli nie rozumiesz, pozwól, aby opublikować kod –

Odpowiedz

25

Wdrożenie WebViewClient i WebChromeClient zarówno jak ten

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(); 
    } 
}........ 

następnie wdrożyć WebChromeClient dla javascript alert, potwierdzić i szybka

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

}); 

więcej szczegółów proszę sprawdzić http://code.google.com/p/mosembro/source/browse/trunk/src/com/lexandera/mosembro/Mosembro.java

+0

Awesome, thank you! –

+0

daję 2 dni na to –

+0

Wszystko działa dobrze! Jeszcze jeden szczegół: okno dialogowe potwierdzenia musi być albo nieodwoływalne, albo z detektorem anulowania zdarzeń podobnym do podpowiedzi. Innym sposobem to zatrzyma przeglądarkę, ponieważ czekałoby na wynik. – prcu

4

Jeśli chcesz dodać wsparcie dla alertbox Następnie należy przejść do WebChromeClient potem nie mogę robić inne rzeczy.

Możesz mieć więcej niż jeden obiekt w większości języków programowania, w tym Java. W związku z tym masz zarówno oddzielne obiekty, jak i i.

2

You trzeba ustawić WebChromeClient (Ta obsługa Okna dialogowe JavaScript, ulubione, tytuły i postępy) dla twojego 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); 

Nadzieja to pomaga :)

+0

Dokładnie to, co chciałem! Dzięki. Nie zdawałem sobie sprawy z jego implementacji, aby pokazać 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

Czy możesz wyjaśnić trochę więcej? –

Powiązane problemy