如何捕获webview中视频播放事件?

atwal 发布于 2015/10/27 15:24
阅读 2K+
收藏 0

最近发现有个app可以捕获webview(加载的是脸书)中的视频播放事件,然后弹出对话框。

个人非常好奇这个app是如何实现的,效果截图如下:

按个人理解,要实现这个功能从理论上说有两种办法,一是捕获视频播放的请求,二是给页面注入JS。

第一种办法是通过重写 WebViewClient 的 shouldOverrideUrlLoading 和 shouldInterceptRequest 事件,我的代码如下:

web = (WebView) findViewById(R.id.webview_fb);

    web.setWebViewClient(new WebViewClient(){
        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
            //LOGI(TAG, "shouldInterceptRequest 1");
            handleUrl(request.getUrl().toString());
            return super.shouldInterceptRequest(view, request);
        }



        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
            //LOGI(TAG, "shouldInterceptRequest 2");
            handleUrl(url);
            return super.shouldInterceptRequest(view, url);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return handleUrl(url);
        }

        private boolean handleUrl(String url) {
            LOGI(TAG, "handleUrl:" + url);
            boolean value = true;
            if (url != null) {
                if (url.toLowerCase().contains(".mp4")) {
                    LOGI(TAG, "VideoUrl:" + url);
                    value = false;
                }
            }
            return value;
        }
    });

    web.getSettings().setLoadWithOverviewMode(true);
    web.getSettings().setJavaScriptEnabled(true);
    web.getSettings().setLoadsImagesAutomatically(true);
    web.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    web.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
    web.getSettings().setSupportZoom(true);
    web.getSettings().setBuiltInZoomControls(false);
    web.getSettings().setAllowContentAccess(true);
    web.getSettings().setAllowUniversalAccessFromFileURLs(true);
    web.getSettings().setLoadWithOverviewMode(true);
    web.getSettings().setDomStorageEnabled(true);

    web.requestFocus();
    web.requestFocusFromTouch();

    web.setNetworkAvailable(true);

    web.setWebChromeClient(new WebChromeClient() {

        public void onProgressChanged(WebView web, int progress) {

        }

    });

    web.loadUrl("https://m.facebook.com");



但是最后获取到了一堆链接确没有视频的,即使在点击视频播放时也没有。所以不知道是我代码写的有问题,还是这种方案不可行。

第二种办法难点在于页面不是我这边可以控制的,且页面很多数据都是通过ajax加载出来的,js注入的难度太大。

请教高手指点一下,如何能实现上面的app中的功能效果,给些思路也行。

加载中
0
_呆圭
_呆圭
最近做毕设刚好想要这个功能,网上找了许多资料都没找到答案,不知道过了这么久楼主解决了吗
atwal
atwal
注入JS实现的
返回顶部
顶部