zoukankan      html  css  js  c++  java
  • Android 中访问网页 webView

    解决中文乱码问题:       

    1.使用getBytes(“编码方式”);;来对汉字进行重编码,得到他的字节数组。

    2.       再使用new String(Bytes[],”解码方式”);对字节数组进行相应的解码。

    webKit应用

    webKit分三个模块:javascriptCore,webCorewebKit.

    WebView浏览网页:

     

    几个重要的地方:

    WebViewClient是专门辅助WebView处理各种通知,请求等事件的类。

    webChromeClient是辅助WebView处理javascript的对话框,网站图标,网站title,加载进度。

    package com.king.android.net;

    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.Window;
    import android.view.View.OnClickListener;
    import android.webkit.JsPromptResult;
    import android.webkit.JsResult;
    import android.webkit.URLUtil;
    import android.webkit.WebChromeClient;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;

    import com.king.android.R;

    /**

     * 描述:浏览网页
     * 作者:Andy.Liu
     * 时间: 2012-7-26  上午07:28:17
     *
    */
    public class WebViewActivity extends Activity {
        
        Context mContext;
        Button btnConn;
        EditText etUrl;
        WebView wvShow;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            
            super.onCreate(savedInstanceState);
            mContext = WebViewActivity.this;
            setContentView(R.layout.webview_layout);
            
            btnConn = (Button) findViewById(R.id.btn_conn);
            etUrl = (EditText) findViewById(R.id.ed_show);
            wvShow = (WebView) findViewById(R.id.wv_view);
            
            btnConn.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    
                    try{
                    String url = etUrl.getText().toString();
                    if(URLUtil.isNetworkUrl(url)){
                            wvShow.loadUrl(url);
                    }else{
                        etUrl.setText("输入网址错误,请重新输入");
                    }}catch(Exception e){
                    }
                    
                }});
            
            

      下面是主要知识点:

    //设置javascript脚本        

    WebSettings webSettings = wvShow.getSettings();
            webSettings.setJavaScriptEnabled(true);
            //设置可以访问文件
            webSettings.setAllowFileAccess(true);
            //设置支持缩放
            webSettings.setBuiltInZoomControls(true);
            
            /**
             * 设置WebViewClient
             * WebViewClient是专门辅助WebView处理各种通知,请求等事件的类。
             * */
            wvShow.setWebViewClient(webViewClient);
            /**
             * webChromeClient是辅助WebView处理javascript的对话框,网站图标,网站title,加载进度。
             * */
            wvShow.setWebChromeClient(webChromeClient);
            
            
        }
         
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if(KeyEvent.KEYCODE_BACK==keyCode){
                //返回前一个页面
                wvShow.goBack();
                return true;
            }
            
            return super.onKeyDown(keyCode, event);
        }
        
        private WebViewClient webViewClient = new WebViewClient(){
            public boolean shouldOverrideUrlLoading(WebView view,String url) {
                view.loadUrl(url);
                return true;
            }
            public void onPageFinished(WebView view,String url){
                super.onPageFinished(view, url);
            }
            
            public void onPageStarted(WebView view,String url,Bitmap favicon){
                super.onPageStarted(view, url,favicon);
            }
        };
        
        private WebChromeClient webChromeClient = new WebChromeClient(){
            //处理js中的alert
            public boolean onJsAlert(WebView view, String url, String message,final JsResult result) {
                Builder builder = new Builder(mContext);
                builder.setTitle("提示对话框");
                builder.setMessage(message);
                builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener(){

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //点击确定按键之后,继续执行网页中的操作
                        result.confirm();
                    }});
                builder.setCancelable(false);
                builder.create();
                builder.show();
                return true;
            };
            public boolean onJsConfirm(WebView view, String url, String message, final android.webkit.JsResult result) {
                Builder builder = new Builder(mContext);
                builder.setTitle("带选择的对话框");
                builder.setMessage(message);
                builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener(){

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //点击确定按键之后,继续执行网页中的操作
                        result.confirm();
                    }});
                builder.setNegativeButton(android.R.string.cancel, new AlertDialog.OnClickListener(){

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //点击取消
                        result.cancel();
                    }});
                builder.setCancelable(false);
                builder.create();
                builder.show();
                return true;
            };
            @Override
            //处理javascript中的prompt
            
    //message为网页中对话框的提示内容
            
    //defaultValue在没有输入时,默认显示的内容
            public boolean onJsPrompt(WebView view, String url, String message,    String defaultValue, final JsPromptResult result) {
                //自定义一个带输入的对话框由TextView和EditText构成
                final LayoutInflater factory = LayoutInflater.from(mContext);
                final View dialogview = factory.inflate(R.layout.prom_dialog, null);
                ((TextView) dialogview.findViewById(R.id.TextView_PROM)).setText(message);
                ((EditText) dialogview.findViewById(R.id.EditText_PROM)).setText(defaultValue);
                
                Builder builder = new Builder(mContext);
                builder.setTitle("带输入的对话框");
                builder.setView(dialogview);
                builder.setPositiveButton(android.R.string.ok,
                        new AlertDialog.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                //点击确定之后,取得输入的值,传给网页处理
                                String value = ((EditText) dialogview.findViewById(R.id.EditText_PROM)).getText().toString();
                                result.confirm(value);
                            }
                        });
                builder.setNegativeButton(android.R.string.cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                result.cancel();
                            }
                        });
                builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
                            public void onCancel(DialogInterface dialog) {
                                result.cancel();
                            }
                        });
                builder.show();
                return true;
            };
            @Override
            //设置网页加载的进度条
            public void onProgressChanged(WebView view, int newProgress) 
            {
                WebViewActivity.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress * 100);
                super.onProgressChanged(view, newProgress);
            }

            @Override
            //设置应用程序的标题title
            public void onReceivedTitle(WebView view, String title) 
            {
                WebViewActivity.this.setTitle(title);
                super.onReceivedTitle(view, title);
            }
        };

    }

    需要注意webView的几个地方 

  • 相关阅读:
    获取其他线程的数据用 queue, 多进程Q
    self: 限制并发量asyncio
    asyncio 中给running 的loop 动态添加 Future Task
    雾里看花之 Python Asyncio
    python协程之动态添加任务
    异步IO( asyncio) 协程
    加快phpstorm、rubymine、pycharm系列IDE运行速度的方法
    scrapy 'fcntl' has no attribute 'F_GETFD
    sitemap index
    Django模板系统 运算
  • 原文地址:https://www.cnblogs.com/liuzenglong/p/2609322.html
Copyright © 2011-2022 走看看