zoukankan      html  css  js  c++  java
  • (转)在Android的webview中定制js的alert,confirm和prompt对话框的方法

    1.首先继承android.webkit.WebChromeClient实现MyWebChromeClient。

    2.在MyWebChromeClient.java中覆盖onJsAlert,,onJsPrompt三个方法。

    3.在初始化Webview时设置调用webview.setWebChromeClient(new MyWebChromeClient());

    4.在Webview载入的html中使用window.alert,window.confirm,window.prompt方法,系统弹出的将是自定义实现的对应对话框。

    MyWebChromeClient.java的代码如下:

    [code]
    package com.lizongbo.mwebdev.;

    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.;
    import android.widget.EditText;

    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:////”
    */
    @Override
    public boolean (WebView view, String url, String message,
    JsResult result) {
    final AlertDialog.Builder builder = new AlertDialog.Builder(view
    .getContext());
    builder.setTitle("lizongbo的Android webview测试alert对话框").setMessage(message)
    .setPositiveButton("确定", null);
    //不需要绑定按键事件
    //屏蔽keycode等于84之类的按键
    builder.setOnKeyListener(new OnKeyListener() {
    @Override
    public boolean onKey(DialogInterface dialog, int keyCode,
    KeyEvent event) {
    Log.v("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);
    }

    @Override
    public boolean onJsBeforeUnload(WebView view, String url, String message,
    JsResult result) {
    return super.onJsBeforeUnload(view, url, message, result);
    }

    /**
    * 覆盖默认的window.confirm展示界面,避免title里显示为“:来自file:////”
    */
    @Override
    public boolean onJsConfirm(WebView view, String url, String message,
    final JsResult result) {
    final AlertDialog.Builder builder = new AlertDialog.Builder(view
    .getContext());
    builder.setTitle("lizongbo的Android webview测试confirm对话框").setMessage(message)
    .setPositiveButton("确定", new OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    result.confirm();
    }
    }).setNeutralButton("取消", new OnClickListener() {
    @Override
    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);
    }

    /**
    * 覆盖默认的window.prompt展示界面,避免title里显示为“:来自file:////”
    * window.prompt('请输入您的域名地址', '618119.com');
    */
    @Override
    public boolean (WebView view, String url, String message,
    String defaultValue, final JsPromptResult result) {
    final AlertDialog.Builder builder = new AlertDialog.Builder(view
    .getContext());
    builder.setTitle("lizongbo的Android webview测试prompt对话框").setMessage(message);
    final EditText et = new EditText(view.getContext());
    et.setSingleLine();
    et.setText(defaultValue);
    builder.setView(et);
    builder.setPositiveButton("确定", new OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    result.confirm(et.getText().toString());
    }
    }).setNeutralButton("取消", new OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    result.cancel();
    }
    });

    //屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题
    builder.setOnKeyListener(new OnKeyListener() {
    @Override
    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);
    }

    }
    [/code]

  • 相关阅读:
    SSAS的维度表之间的关系只能有一个不能有多个
    SqlServer 在创建数据库时候指定的初始数据库大小是不能被收缩的
    SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式(转载)
    HttpHandler和ashx要实现IRequiresSessionState接口才能访问Session信息(转载)
    Jquery Ajax调用aspx页面方法 (转载)
    linux查找目录下的所有文件中是否含有某个字符串 <zhuan>
    ubuntu下使用sdk manager 安装sdk 其他版本
    Ubuntu更新命令 <转>
    sudo:must be setuid root 解决方法 <转>
    Ubuntu 查看磁盘空间大小命令<转>
  • 原文地址:https://www.cnblogs.com/greywolf/p/3270849.html
Copyright © 2011-2022 走看看