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.