1

我一直在處理這個問題至少一個星期。我已經閱讀了StackOverflow的所有文章,但我仍然沒有找到解決方案,我開始認爲這是不可能的。Android WebView html5視頻強制全屏

我想顯示在網頁視圖的HTML embebbed在這樣的佈局:

Scheme of the problem

的問題是,如果HTML代碼中有一個HTML5視頻裏面會冒出由於錯誤在Android操作系統中:Link to bug

我已經嘗試了很多解決方法,但沒有一個似乎在工作。我最後一次嘗試是在全屏顯示低於Jelly Bean的設備的視頻(他們已經修復了此版本的錯誤)。

我沒有任何控制HTML我必須顯示,所以我發現要做的事情的唯一方法是注入JavaScript代碼。現在,我正在處理onShowCustomView以使其全屏。

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視頻。
  • 對於低於Jelly Bean的OS版本,強制全屏。

現在,我已經達到:在HTML5視頻是不是一個iframe中比Ice Cream Sandwich的低版本,全屏模式

  • 顯示(ICS忽略webkitEnterFullScreen)
+0

我有企圖收集相關信息,以思考;這個問題是追逐「聖盃」的結果嗎? [x-platform dev] – ChiefTwoPencils

+1

是的。爲了讓你知道我是多麼的絕望,我嘗試在全屏按鈕上模擬觸摸事件:) – Juangcg

回答

-2

你可以嘗試設置一個用戶代理程序,它適用於我在ICS上工作的webView,如下所示:

String ua = "Mozilla/5.0 (Android; Tablet; rv:20.0) Gecko/20.0 Firefox/20.0"; 

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

如果不行,look at this link for other user agents

好運

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);