美文网首页android 集结号
Android WebView解析video标签的优化

Android WebView解析video标签的优化

作者: lhl_012 | 来源:发表于2018-06-25 18:00 被阅读135次

android版本不统一,webview不同版本实现不一致,不同设备厂商也不一致,出现效果也是不一致,还是iOS老铁们幸福,系统实现美滋滋。

这时,有人会问,为什么不用第三方?wtf?第三方?tbs?crosswalk?后者app迅速增大20-40M...,前者的东西,自己定义了video标签,但是第一次为什么还是显示系统的?全屏后返回,webview下面的大白条怎么破?(webview修改的方法不管用,或者是我的方法不对...一句话,开发产品tx的东西能不用就别用,太坑了。。。)

下面的是自己将video标签转化为img标签,然后点击后跳转到新界面自己处理播放逻辑。

public static String parseVideo(String html) {
        if (!html.contains("</video>")) {
            return html;
        }
        String style = "<style>.video-main{position:relative;margin:0;padding:0;height:0;padding-bottom:56.25%}.video-main .img{position:absolute;top:0;left:0;z-index:99;width:100%;height:100%!important}.i-icon.play-icon{position:absolute;top:50%;left:50%;z-index:99;width:80px;height:80px;margin-left:-20px;margin-top:-20px}.i-icon.play-icon:before{background:url(http://resource.qingbao.cn/image/medals/play_icon80.png) no-repeat 0 0;background-size:100% auto;width:48px;height:48px}.i-icon:before{content:\"\";position:absolute;top:0;left:0}</style><script>function videoClick(poster,src){window.videolistener.clickVideo(poster,src)}</script>";
        StringBuilder stringBuffer = new StringBuilder(html);
        stringBuffer.insert(html.indexOf("<head>") + 6, style);
        Document document = Jsoup.parse(stringBuffer.toString());
        Elements elements = document.getElementsByTag("video");
        for (Element element : elements) {
            String poster = element.attr("poster");
            String src = element.attr("src");
            Element elem = document.createElement("div");
            elem.addClass("video-main");
            //
            Element imgElem = document.createElement("img");
            imgElem.addClass("img");
            imgElem.attr("src", poster);
            Element iElem = document.createElement("i");
            iElem.addClass("i-icon play-icon");
            iElem.attr("onclick", "videoClick('" + poster + "','" + src + "')");
            elem.appendChild(imgElem);
            elem.appendChild(iElem);
            element.replaceWith(elem);
        }
        return document.toString();
    }
webView.addJavascriptInterface(new VideoInterface(activity), "videolistener");

前端监听js

public class VideoInterface {

    private BaseActivity aty;

    public VideoInterface(BaseActivity activity) {
        aty = activity;
    }

    @JavascriptInterface
    public void clickVideo(String poster, String url) {
    //此处实现自己挑战
    }
}

用到Jsoup,implementation 'org.jsoup:jsoup:1.11.3'

相关文章

网友评论

    本文标题:Android WebView解析video标签的优化

    本文链接:https://www.haomeiwen.com/subject/zoayyftx.html