• WebView一般用法总结


    下面是webview常规的用法:

    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.webkit.JavascriptInterface;
    import android.webkit.JsResult;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;

    public class MainActivity extends Activity {


    //在Android 4.3系统及其一下WebView内部采用Webkit渲染引擎,在Android 4.4采用chromium 渲染引擎来渲染View的内容。

    //别忘记,在androidMainFest.xml中添加网络权限
    //<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    //<uses-permission android:name="android.permission.INTERNET" />
    //<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />


    WebView test_wb;

    JSUtil jsUtil;

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //原生和webview交互的类
    jsUtil = new JSUtil();

    //xml布局页面中定义
    test_wb=(WebView)findViewById(R.id.test_wb);

    //清理
    //wv.clearCache(true);
    //wv.clearHistory();
    //wv.clearFormData();


    //设置webview属性
    WebSettings ws=test_wb.getSettings();
    //一般都会设置支持js
    ws.setJavaScriptEnabled(true);
    //默认编码格式
    ws.setDefaultTextEncodingName("UTF-8");
    //设置页面自适应
    ws.setUseWideViewPort(true);
    //设置缓存模式
    ws.setCacheMode(WebSettings.LOAD_NO_CACHE);
    //……………………

    //获取焦点
    test_wb.requestFocus();
    //注入webview对象
    test_wb.addJavascriptInterface(jsUtil, "local_obj");//jsUtil对象类方法中添加了@JavascriptInterface标注,通过"window.local_obj.方法名"调用

    //加载网页
    test_wb.loadUrl("http://www.zjtax.net");
    //加载本地地址,file://android_asset/test.html
    // test_wb.loadUrl("file:///android_asset/test.html");----------------这里是file:/// 3个/线哦
    //执行js,javascript:alert()
    // test_wb.loadUrl("javascript:alert('ok')");


    //主要处理解析,渲染网页等浏览器做的事情
    //若不重写webviewclient的shouldOverrideUrlLoading方法,加载网页会默认用外部的浏览器打开//
    test_wb.setWebViewClient(new WebViewClient()
    {
    @Override
    public boolean shouldOverrideUrlLoading(WebView wb,String url)
    {
    test_wb.loadUrl(url);
    return true;//表示手动处理,若没有loadUrl(url)页面不会跳转。

    //return false;//若不想手动处理,直接用webview自动处理,可以直接返回false.

    //return super.shouldOverrideUrlLoading(wb, url);
    }



    //页面开始请求
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
    // TODO Auto-generated method stub
    super.onPageStarted(view, url, favicon);
    }


    //页面请求结束
    @Override
    public void onPageFinished(WebView view, String url) {
    // TODO Auto-generated method stub
    super.onPageFinished(view, url);
    }


    //页面有错误
    @Override
    public void onReceivedError(WebView view, int errorCode,
    String description, String failingUrl) {
    // TODO Auto-generated method stub
    super.onReceivedError(view, errorCode, description, failingUrl);
    }


    }

    );



    //是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等
    //重写处理网页的alert,confirm,Prompt ,Window,Progress
    test_wb.setWebChromeClient(new WebChromeClient() {

    //进度条
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
    pb.setProgress(newProgress);
    if(newProgress==100){
    pb.setVisibility(View.GONE);
    }
    }


    //网站标题
    @Override
    public void onReceivedTitle(WebView view, String title) {
    // TODO Auto-generated method stub
    super.onReceivedTitle(view, title);
    }


    //网站图标
    @Override
    public void onReceivedTouchIconUrl(WebView view, String url,
    boolean precomposed) {
    // TODO Auto-generated method stub
    super.onReceivedTouchIconUrl(view, url, precomposed);
    }


    //窗体
    @Override
    public boolean onCreateWindow(WebView view, boolean isDialog,
    boolean isUserGesture, Message resultMsg) {
    // TODO Auto-generated method stub
    return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg);
    }


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



    /**
    * 覆盖默认的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.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);
    }







    /**
    * 覆盖默认的window.confirm展示界面,避免title里显示为“:来自file:////”
    */
    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);
    }




    /**
    * 覆盖默认的window.prompt展示界面,避免title里显示为“:来自file:////”
    * window.prompt('请输入您的域名地址', '618119.com');
    */
    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);
    }

    });


    }
    }

  • 相关阅读:
    wpf 控件回车事件中调用tab实现方法
    C#中M的N次方显示
    新概念英语第三册单词
    新概念英语第二册单词
    手把手教你搭建一个vue项目
    Vuex里的module选项和移动端布局
    Vuex与axios的封装和调用
    Vue路由
    Vue脚手架的搭建和路由配置
    Vue全家桶之一Vue(基础知识篇)
  • 原文地址:https://www.cnblogs.com/softwarelanguagebs/p/5503276.html
Copyright © 2020-2023  润新知