首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Android WebView html5视频强制全屏

Android WebView html5视频强制全屏
EN

Stack Overflow用户
提问于 2013-08-21 09:25:06
回答 2查看 4.9K关注 0票数 1

我已经在这个问题上工作了至少一个星期。我在StackOverflow上读过所有关于它的文章,但我仍然没有创建解决方案,我开始认为这是不可能的。

我想在布局中嵌入的want视图中显示HTML,如下所示:

问题是,如果该HTML代码中包含一个HTML5视频,由于Android:链接到错误中的一个bug,它将被裁剪。

我尝试过许多解决办法,但似乎都没有奏效。我的最后一次尝试是在全屏上显示低于Jelly的设备的视频(他们已经修复了这个版本的错误)。

我对必须显示的HTML没有任何控制,所以我找到的唯一方法就是注入javascript代码。现在,我正在处理两个onShowCustomView,使其成为全屏。

代码语言:javascript
代码运行次数:0
运行
复制
setWebViewClient(new WebViewClient() {

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        if (android_sdk < JELLY_BEAN) {
            detectVideoOnWebPage();
        }
    }
});

private void detectVideoOnWebPage() {
    // Run javascript code that detects the video end and notifies the
    // interface
    String js = "javascript:";
    js += "_ytrp_html5_video = document.getElementsByTagName('VIDEO')[0];";
    js += "if (_ytrp_html5_video !== undefined) {";
    {

        js += "_ytrp_html5_video.webkitEnterFullScreen();";
        js += "_VideoEnabledWebView.notifyVideoPresence();";
        js += "function video_start_playing() {";
        {
            js += "_VideoPlayed.notifyVideoStarted();";
            js += "ev.target.removeEventListener('playing', video_start_playing);";

        }
        js += "}";
        js += "ev.target.addEventListener('playing', video_start);";
    }
    js += "} else if (document.getElementsByTagName('iframe')) {";
    {
        js += "_VideoEnabledWebView.notifyVideoPresence();";
    }
    js += "} else {";
    {
        js += "var handler = function(ev) {";
        {
            js += "if (ev.target.nodeName.toUpperCase() === \"VIDEO\".toUpperCase()) {";
            {
                js += "function video_start_playing() {";
                {
                    js += "_VideoPlayed.notifyVideoStarted();";
                    js += "ev.target.webkitEnterFullScreen();";
                }
                js += "}";
                js += "ev.target.addEventListener('play', video_start_playing);";
                js += "_VideoDetected.notifyVideoPresence();";
                js += "document.removeEventListener (\"DOMNodeInserted\", handler);";
            }
            js += "} else {";
            {
                js += "_ytrp_html5_video = document.getElementsByTagName('VIDEO')[0];";
                js += "if (_ytrp_html5_video !== undefined) {";
                {
                    js += "_VideoEnabledWebView.notifyVideoPresence();";
                }
            }
            js += "};";
        }
        js += "};";
        js += "document.addEventListener (\"DOMNodeInserted\", handler);";
    }
    js += "}";
    loadUrl(js);
}

我的目标是:

  • 检测html何时包含html5视频。
  • 对于操作系统版本低于果冻豆,强制全屏。

现在,我已经达到:

  • html5视频在全屏模式下显示,在低于冰淇淋三明治版本的iframe中显示(ICS忽略webkitEnterFullScreen)
EN

回答 2

Stack Overflow用户

发布于 2015-10-21 06:52:04

您可以在播放事件上请求全屏,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
var element = document.getElementById("video");
element.addEventListener("playing", function() {
    if (element.requestFullscreen) {
        element.requestFullscreen();
    } else if (element.webkitRequestFullscreen) {
        element.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
    }
}, false);
票数 0
EN

Stack Overflow用户

发布于 2013-10-31 10:24:43

您可以尝试将用户代理设置为在ICS上为我工作的webView,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
String ua = "Mozilla/5.0 (Android; Tablet; rv:20.0) Gecko/20.0 Firefox/20.0";

WebSettings s = webView.getSettings();
s.setUserAgentString(ua);

如果不管用的话,查看其他用户代理的此链接。

祝好运

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18353670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档