CacheWebView icon indicating copy to clipboard operation
CacheWebView copied to clipboard

请问如何监听页面中的资源已经加载完毕呢?

Open 0xByteLeon opened this issue 6 years ago • 9 comments

提前把页面加载玩然后显示出来,但是onpagerfinish回调的时候资源加载不一定完成了,想问一下,你是怎么处理的呢?

0xByteLeon avatar Apr 09 '19 06:04 0xByteLeon

目前这个没有啥好办法,不同浏览器内核对onpagerfinish 调用时机也不同,建议业务上不要太依赖onpagerfinish了

yale8848 avatar Apr 11 '19 01:04 yale8848

目前这个没有啥好办法,不同浏览器内核对onpagerfinish 调用时机也不同,建议业务上不要太依赖onpagerfinish了

好吧,谢谢了,还有个问题 我想在shouldInterceptRequest 方法中把页面中的视频替换为我本地缓存的视频,但是发现在Android 8.1 上可以,在Android4.4和Android5.1上不行,请问你有什么好的办法么?

0xByteLeon avatar Apr 16 '19 01:04 0xByteLeon

4.4和5.1是报什么错误了?

yale8848 avatar Apr 16 '19 02:04 yale8848

4.4和5.1是报什么错误了?

没有报错,但是H5播放的任然的video 标签中src的视频, 而不是本地缓存的

` @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Nullable @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { LogUtils.d(Thread.currentThread().getName() + " +++++++++++++++++++Start+++++++++++++++++++"); LogUtils.d(request.getRequestHeaders()); LogUtils.d(request.getUrl().toString());

            LogUtils.d(Thread.currentThread().getName() + " ++++++++++++++++END++++++++++++++++++++++");


            if (request.getUrl().toString().endsWith("mp4")) {
                try {
                    return new WebResourceResponse(MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(request.getUrl().toString())), "UTF-8", new FileInputStream(getFilesDir().getAbsolutePath() + File.separator + "test.mp4"));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (request.getUrl().toString().endsWith("jpg")) {
                try {
                    return new WebResourceResponse(MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(request.getUrl().toString())), "UTF-8", new FileInputStream(getFilesDir().getAbsolutePath() + File.separator + "temp.jpg"));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            return super.shouldInterceptRequest(view, request);
        }

        @Nullable
        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
            LogUtils.d(url);

            if (url.endsWith("mp4")) {
                try {
                    WebResourceResponse webResourceResponse = new WebResourceResponse(MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(url)), "UTF-8", new FileInputStream(getFilesDir().getAbsolutePath() + File.separator + "test.mp4"));
                    return webResourceResponse;
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (url.endsWith("jpg")) {
                try {
                    return new WebResourceResponse(MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(url)), "UTF-8", new FileInputStream(getFilesDir().getAbsolutePath() + File.separator + "temp.jpg"));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            return WebViewCacheInterceptorInst.getInstance().interceptRequest(url);
        }`

这是拦截请求的写法

0xByteLeon avatar Apr 16 '19 02:04 0xByteLeon

你看看webview Console 有啥信息没,还有把http请求和返回header打印出来看看,我猜可能和gzip有关吧

yale8848 avatar Apr 17 '19 01:04 yale8848

你看看webview Console 有啥信息没,还有把http请求和返回header打印出来看看,我猜可能和gzip有关吧

并没有,MP4的请求似乎不是经过原生这边的,低版本上,webresponse 是空的

0xByteLeon avatar Apr 17 '19 01:04 0xByteLeon

你说的webresponse 是空的是啥意思?

yale8848 avatar Apr 17 '19 01:04 yale8848

你说的webresponse 是空的是啥意思?

就是在shouldInterceptRequest中WebResourceResponse 是空的 ,自己构造的话不生效

0xByteLeon avatar Apr 17 '19 01:04 0xByteLeon

好吧,那这个问题和webview版本有关系,建议你看看webview video gzip方面,看能有啥突破口没

yale8848 avatar Apr 17 '19 02:04 yale8848