2015-03-30 23 views
5

Obecnie próbuję zaimplementować osadzenie youtube w mojej aplikacji na Androida, która korzysta z WebView do wyświetlania treści i kieruję reklamy na interfejs API 14 i wyżej, ale Problem polega na tym, że elementy iframe osadzone przez youtube nie są wyświetlane w mojej przeglądarce internetowej w wersji 4.2.2 i nowszej, ale działają poprawnie w wersji 4.3 i nowszej. Gubię na co brakowało mi ale dla próbki Oto kod używam do wdrożenia:Android WebView z osadzonymi ramkami iframe nie wyświetla się w 4.2.2 i poniżej.

String customHtml = ""; 

     String video; // = "<iframe src=\"http://www.youtube.com/embed/" + "dRvIiIVoVNw" + "\" width=\"100%\" height=\""+ 320 +"px\" frameborder=\"0\"></iframe>"; 

     video = "<div id=\"player\"></div>" + 
       " <script>" + 
       "  var tag = document.createElement('script');" + 
       "  tag.src = \"https://www.youtube.com/iframe_api\";" + 
       "  var firstScriptTag = document.getElementsByTagName('script')[0];" + 
       "  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);" + 
       "  var player;" + 
       "  function onYouTubeIframeAPIReady() {" + 
       "  player = new YT.Player('player', {" + 
       "   height: '390'," + 
       "   width: '640'," + 
       "   videoId: 'dRvIiIVoVNw'," + 
       "   events: {" + 
       "   'onReady': onPlayerReady," + 
       "   'onStateChange': onPlayerStateChange" + 
       "   }" + 
       "  });" + 
       "  }" + 
       "  function onPlayerReady(event) {" + 
       "  event.target.playVideo();" + 
       "  }" + 
       "  var done = false;" + 
       "  function onPlayerStateChange(event) {" + 
       "  if (event.data == YT.PlayerState.PLAYING && !done) {" + 
       "   setTimeout(stopVideo, 6000);" + 
       "   done = true;" + 
       "  }" + 
       "  }" + 
       "  function stopVideo() {" + 
       "  player.stopVideo();" + 
       "  }" + 
       " </script>"; 

     customHtml = "<html>" + "<body>" 
        /*add the video here*/ 
       + video 
       + "<b><font size=\"" 
       + 5 + "\">" 
       //+ "<div id='wrap'>" 
       + "Test title" 
       + "</font></b>" 
       + "<font size=\"" + 3 + "\"><br><br><i>Detail1: " + "Test" + "<br/>" + new_date + "<br />Detail2: "+ "Test" +"</i></font><br><br>" 
       + "<font size=\"" + 3 + "\">" 
       + "Detail content" + "</font>" 
       + "<br><br><br></body></html>"; 

     webView.loadData(customHtml, "text/html; charset=utf-8", "UTF-8"); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.setWebChromeClient(new WebChromeClient()); 
     webView.getSettings().setPluginState(WebSettings.PluginState.ON); 
     webView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND); 
     webView.setWebViewClient(new DetailWebViewClient()); 

DetailWebViewClient jest tylko prosta korekcja:

private class DetailWebViewClient extends WebViewClient { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (url.contains("http")) { 
       Intent webView = new Intent(getBaseContext(), ActivityWebView.class); 
       webView.putExtra("url", url); 
       startActivity(webView); 
       return true; 
      } 
      return false; 
     } 

     @Override 
     public void onReceivedError(WebView view, int errorCode, 
            String description, String callbackUrl) { 

      super.onReceivedError(view, errorCode, description, callbackUrl); 

      Toast.makeText(getBaseContext(), 
        description + " errorcode=" + errorCode, Toast.LENGTH_SHORT) 
        .show(); 

     } 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
     } 

    } 

Teraz co starałem jest zarówno iframe jeden i iframe API here, ale nie ma szczęścia w obu.

Używam również android:hardwareAccelerated="true" na moim manifeście, ale nadal nie działa. Szukałem również innych pytań z tymi samymi problemami, ale wszystkie te rozwiązania nie działały na moim końcu (WebChromeClient, PluginsEnabled, HardwareAccelerated). Mam nadzieję, że ktoś może mi w tym pomóc.

Odpowiedz

2

Naprawiono go już i problem polega na te linie:

webView.getSettings().setPluginState(WebSettings.PluginState.ON); 
webView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND); 

Więc oto pełne ustawienia Webview użyłem:

 webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
     webView.getSettings().setSupportMultipleWindows(true); 
     webView.setWebChromeClient(new WebChromeClient()); 
     webView.setHorizontalScrollBarEnabled(false); 
     webView.loadData(customHtml, "text/html; video/mpeg", "UTF-8"); 
     webView.setWebViewClient(new DetailWebViewClient()); 

i już teraz działa dobrze na moim końcu. :)