12
votes

Android: Comment ajouter Support La zone d'alerte JavaScript dans WebViewClient?

i Mettre en place les nombreuses choses à l'aide de la webviewClient comme Onunhandledkeyevent, DépôtsOverriDeurlloading et plus.Si souhaitent ajouter le support pour Alertbox, puis devez passer à webchromeclient alors je ne peux pas faire d'autres choses. BR /> J'ai choisi le code de JavasRip Alert Box à http: // lexandera.com/2009/01/adding-alert-support-a-a-webview/


Merci


2 commentaires

hey rubi ne peut pas comprendre que ce dont tu as besoin?


Je souhaite ajouter la prise en charge de Javascript Alertbox à WebViewClient pour ne pas utiliser le webchromeclient? Si vous ne comprenez pas, laissez ensuite publier le code


3 Réponses :


4
votes

Si vous souhaitez ajouter le support pour Alertbox, alors devez basculer sur webchromeclient puis je ne peux pas faire d'autres choses.

Vous pouvez avoir plus d'un objet dans la plupart des langages de programmation, y compris Java. Par conséquent, vous avez à la fois un WebViewClient et a webchromeclient comme objets distincts.


0 commentaires

26
votes

Implémenter le WebViewClient et Webchromeclient, tels que celui-ci

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

 });


1 commentaires

Tout fonctionne bien! Un détail de plus: Confirmer la boîte de dialogue ne doit pas être annulable, ni avec l'auditeur d'événement d'annulation similaire à l'invite. Autre façon, il gèlera Webview, car cela attendra le résultat.



3
votes

Vous devez définir webchromeclient fort> (cette poignée de dialogues JavaScript, de favicons, de titres et de la progression) pour votre webview fort>.

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


1 commentaires

Exactement ce que je voulais! Merci. N'était pas au courant de la mettre en œuvre pour montrer à Jsstuff.