Webviewロードページ、JSメソッドでロードできない問題解決

7116 ワード

今日はwebviewで、JSメソッドをロードすることができなくて、そのヒントボックスから飛び出せなくて、webviewを書いたことに気づきました.getSettings().setJavaScriptEnabled(true); この一言も全く役に立たない.その後、ネット上で言われている解決策はWebChromeClientを使用し、その中のいくつかの方法を書き換えることであることがわかりました.
  MyWebChromeClient.java
package com.example.webview_js;

import android.app.AlertDialog;
import android.content.DialogInterface;  
import android.content.DialogInterface.OnCancelListener;  
import android.content.DialogInterface.OnClickListener;  
import android.content.DialogInterface.OnKeyListener;  
import android.graphics.Bitmap;  
import android.os.Message;  
import android.util.Log;  
import android.view.KeyEvent;  
import android.webkit.JsPromptResult;  
import android.webkit.JsResult;  
import android.webkit.WebChromeClient;  
import android.webkit.WebView;  
import android.widget.EditText;  
  
/** 
17. * http://618119.com/archives/2010/12/20/199.html 
18. */  
 
//****************************************************************************  
public class MyWebChromeClient extends WebChromeClient {  
   @Override  
    public void onCloseWindow(WebView window) {  
        super.onCloseWindow(window);  
    }  
  
    @Override  
    public boolean onCreateWindow(WebView view, boolean dialog,  
           boolean userGesture, Message resultMsg) {  
        return super.onCreateWindow(view, dialog, userGesture, resultMsg);  
    }  
  
    /**  
     *      window.alert    ,  title    “:  file:////”  
     */  
   public boolean onJsAlert(WebView view, String url, String message,  
           JsResult result) {  
        final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());  
                 
       builder.setTitle("   ")  
                .setMessage(message)  
                .setPositiveButton("  ", null);  
                  
        //            
        //   keycode  84       
        builder.setOnKeyListener(new OnKeyListener() {  
            public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {  
                Log.i("onJsAlert", "keyCode==" + keyCode + "event="+ event);  
               return true;  
            }  
        });  
        //      back      
       builder.setCancelable(false);  
        AlertDialog dialog = builder.create();  
        dialog.show();  
        result.confirm();//         ,    confirm,             。  
        return true;  
        // return super.onJsAlert(view, url, message, result);  
    }  
 
    public boolean onJsBeforeUnload(WebView view, String url,  
           String message, JsResult result) {  
        return super.onJsBeforeUnload(view, url, message, result);  
    }  
  
    /** 
67.     *      window.confirm    ,  title    “:  file:////” 
68.     */  
    public boolean onJsConfirm(WebView view, String url, String message,  
            final JsResult result) {  
       final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());  
        builder.setTitle("   ")  
                .setMessage(message)  
               .setPositiveButton("  ",new OnClickListener() {  
                            public void onClick(DialogInterface dialog,int which) {  
                                result.confirm();  
                            }  
                        })  
                .setNeutralButton("  ", new OnClickListener() {  
                   public void onClick(DialogInterface dialog, int which) {  
                       result.cancel();  
                    }  
                });  
        builder.setOnCancelListener(new OnCancelListener() {  
            @Override  
           public void onCancel(DialogInterface dialog) {  
               result.cancel();  
            }  
        });  
  
        //   keycode  84     ,                            
       builder.setOnKeyListener(new OnKeyListener() {  
            @Override  
           public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {  
                Log.v("onJsConfirm", "keyCode==" + keyCode + "event="+ event);  
               return true;  
           }  
        });  
        //      back      
        // builder.setCancelable(false);  
       AlertDialog dialog = builder.create();  
        dialog.show();  
        return true;  
        // return super.onJsConfirm(view, url, message, result);  
    }  
  
    /** 
108.     *      window.prompt    ,  title    “:  file:////” 
109.     * window.prompt('         ', '618119.com'); 
110.     */  
    public boolean onJsPrompt(WebView view, String url, String message,  
            String defaultValue, final JsPromptResult result) {  
        final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());  
                  
       builder.setTitle("   ").setMessage(message);  
                  
        final EditText et = new EditText(view.getContext());  
        et.setSingleLine();  
        et.setText(defaultValue);  
       builder.setView(et)  
                .setPositiveButton("  ", new OnClickListener() {  
                    public void onClick(DialogInterface dialog, int which) {  
                       result.confirm(et.getText().toString());  
                    }  
          
               })  
               .setNeutralButton("  ", new OnClickListener() {  
                    public void onClick(DialogInterface dialog, int which) {  
                        result.cancel();  
                    }  
                });  
  
        //   keycode  84     ,                            
       builder.setOnKeyListener(new OnKeyListener() {  
            public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {  
                Log.v("onJsPrompt", "keyCode==" + keyCode + "event="+ event);  
               return true;  
            }  
        });  
  
        //      back      
        // builder.setCancelable(false);  
        AlertDialog dialog = builder.create();  
        dialog.show();  
        return true;  
        // return super.onJsPrompt(view, url, message, defaultValue,  
       // result);  
    }  
  
    @Override  
   public void onProgressChanged(WebView view, int newProgress) {  
        super.onProgressChanged(view, newProgress);  
    }  
  
    @Override  
    public void onReceivedIcon(WebView view, Bitmap icon) {  
       super.onReceivedIcon(view, icon);  
    }  
  
   @Override  
    public void onReceivedTitle(WebView view, String title) {  
        super.onReceivedTitle(view, title);  
    }  
  
    @Override  
   public void onRequestFocus(WebView view) {  
        super.onRequestFocus(view);  
    }  
}  

URLをロードする前にこの2行を書いて、応用します
MyWebChromeClient myWebChromeClient = new MyWebChromeClient();
webview.setWebChromeClient(myWebChromeClient);

これでいいです.文章の借見:http://www.imooo.com/web/web/962004.htm
  MyWebChromeClient.JAvaの適用性はとても大きくて、私は変えていないでOKしました
 
コードのダウンロード:http://download.csdn.net/detail/chexitianxia/9032525