package com.test.js2java;import java.util.Timer;import java.util.TimerTask;import android.app.Activity;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.Window;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;public class TestJsActivity extends Activity {    private long timeout = 5000;    private WebView mWebView;    private Handler mHandler = new Handler();    private Timer timer;    @Override    public void onCreate(Bundle icicle) {        super.onCreate(icicle);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.main);        mWebView = (WebView) findViewById(R.id.webview);        WebSettings webSettings = mWebView.getSettings();        webSettings.setJavaScriptEnabled(true);        webSettings.setAllowFileAccess(true);        mWebView.setWebViewClient(new WebViewClient() {            /*             * 创建一个WebViewClient,重写onPageStarted和onPageFinished             *              *              * onPageStarted中启动一个计时器,到达设置时间后利用handle发送消息给activity执行超时后的动作.             *              */            @Override            public void onPageStarted(WebView view, String url, Bitmap favicon) {                Log.d("testTimeout", "onPageStarted...........");                // TODO Auto-generated method stub                super.onPageStarted(view, url, favicon);                timer = new Timer();                TimerTask tt = new TimerTask() {                    @Override                    public void run() {                        /*                         * 超时后,首先判断页面加载进度,超时并且进度小于100,就执行超时后的动作                         */                        if (TestJsActivity.this.mWebView.getProgress() < 100) {                            Log.d("testTimeout", "timeout...........");                            Message msg = new Message();                            msg.what = 1;                            mHandler.sendMessage(msg);                            timer.cancel();                            timer.purge();                        }                    }                };                timer.schedule(tt, timeout, 1);            }            /**             * onPageFinished指页面加载完成,完成后取消计时器             */            @Override            public void onPageFinished(WebView view, String url) {                // TODO Auto-generated method stub                super.onPageFinished(view, url);                Log.d("testTimeout", "onPageFinished+++++++++++++++++++++++++");                Log.d("testTimeout", "+++++++++++++++++++++++++"                        + TestJsActivity.this.mWebView.getProgress());                timer.cancel();                timer.purge();            }        });        mWebView.loadUrl("http://image.baidu.com/i?ct=201326592&cl=2&nc=1&lm=-1&st=-1&tn=baiduimage&istype=2&fm=index&pv=&z=0&word=%D7%C0%C3%E6&s=0");    }}



其中要注意的是onPageFinished的两点,第一点,官方是这样解释的:

Notify the host application that a page has finished loading. This method is called only for main frame. When onPageFinished() is called, the rendering picture may not be updated yet. To get the notification for the new Picture, useonNewPicture(WebView, Picture).

也就是说,程序只认为DOM加载完成就完成了,正在加载的图片不在这个范围之内。

第二点是,如果在JS文件中又动态去加载另一JS,onPageFinished方法会在所有的JS全部加载完毕后才调用。


更多相关文章

  1. Android(安卓)– 加载图片本缓存到内存与本地
  2. Android加载html实现文件上传功能
  3. android简易下拉刷新测试
  4. Android(安卓)Glide加载Gif
  5. Android(安卓)ViewPager循环左右自动滑动加载Page
  6. android异步加载图片
  7. android加载.swf flash文件
  8. android adapter 异步加载图片
  9. Android在WebView中注入Js代码

随机推荐

  1. android界面模糊到清晰,效果去除
  2. Android: android source code online
  3. Android中ListView的addFooterView不显示
  4. android上的i-jetty
  5. Android安卓51个开源代码
  6. 将软键盘变成搜索
  7. Android(安卓)权限汇总
  8. 点击LinearLayout使用selector改变TextVi
  9. android定位个人当前位置
  10. 安卓隐藏标题栏状态栏 ,实现全屏效果