문제유튜브 재생이 때문에 웹보기 내에서 비디오를 재생하려고 "크로스 원산지 요청"
에 웹뷰에서 실패하는 많은 "크로스 원산지 요청"실패와 비디오 (안드로이드 5.0) 결과는 재생되지 않습니다. 그러나 Google 크롬에서는 랩톱에서 아래 HTML을 사용하면 동영상이 완벽하게 재생됩니다.
HTML
<!DOCTYPE html>
<html>
<head>
<style>
html{width:100%;height:100%;}
body{margin:0;width:100%;height:100%;background-color:black;}
</style>
</head>
<body>
<div id='player'></div>
<script>
var playerLoaded = false;
var percentReported = 0;
var percentCurrent = 0;
var tag = document.createElement('script');
tag.src = 'http://www.youtube.com/player_api';
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubePlayerAPIReady() {
playerLoaded = true;
player = new YT.Player('player', {
width:'100%',
height:'100%',
videoId:'CpaOh4poNms',
playerVars: { playsinline: 1 },
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange,
'onError': onPlayerError
}
});
}
function onPlayerReady(event) {
event.target.playVideo();
setInterval(onPlayerTimeUpdate, 1000);
}
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.ENDED) {
}
}
function onPlayerError(event) {
}
function onPlayerTimeUpdate() {
percentCurrent = Math.round(player.getCurrentTime()/player.getDuration() * 100);
if (percentCurrent > percentReported) {
percentReported = percentCurrent;
}
}
setTimeout(function() {
if (!playerLoaded) {
}
}, 10000);
</script>
</body>
</html>
오류
01-15 11 : 21 : 42.410이 21328-21328/com.my.android.app I/크롬 : [INFO : "https://www.youtube.com '이 (가) 대상 창 ('https://www.youtube.com ')과 일치하지 않습니다.'(0) 01-15 11 : 21 : 42.898 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0)] "XMLHttpRequest에서 크롬을로드 할 수 없습니다. -extension : //boadgeojelhgndaghljhdicfkmllpafd/cast_sender.js. 교차 출처 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.899 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 chrome-extension : //dliochdbjfkdbacpmhlcpmleaejidimm/cast_sender.js를로드 할 수 없습니다. 교차 출처 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.899 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //hfaagokkkhdbgiakmmlclaapfelnkoah/cast_sender.js. 크로스 원본 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.901 21328-21328/com.my.android.app I/chromium : [정보 : 콘솔)] "XMLHttpRequest는 크롬 확장자 : //fmfcbgogabcbclcofgocippekhfcmgfj/cast_sender.js를로드 할 수 없습니다. 크로스 원산지 요청은 HTTP 지원됩니다 ", 소스 :. http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 11월 1일에서 15일까지 : 21 : 42.901 21328-21328가/com.my.android.app I/크롬 : [INFO : 콘솔 (0)] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 교차 출처 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.911 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 크로스 원본 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.914 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장자 : //fmfcbgogabcbclcofgocippekhfcmgfj/cast_sender.js를로드 할 수 없습니다. 크로스 원본 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.914 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 크로스 원본 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.917 21328-21328/com.my.android.app I/chromium : [정보 : 콘솔 (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 교차 출처 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.921 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //hfaagokkkhdbgiakmmlclaapfelnkoah/cast_sender.js. 크로스 원본 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.922 21328-21328/com.my.android.app I/chromium : [정보 : 콘솔)] "XMLHttpRequest는 크롬 확장자 : //fmfcbgogabcbclcofgocippekhfcmgfj/cast_sender.js를로드 할 수 없습니다. 교차 출처 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.923 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 크로스 원본 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.926 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 크로스 원본 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.928 21328-21328/com.my.android.app I/chromium : [정보 : 콘솔 (0))] "XMLHttpRequest는 크롬 확장자 : //fmfcbgogabcbclcofgocippekhfcmgfj/cast_sender.js를로드 할 수 없습니다. 크로스 원본 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.928 21328-21328/com.my.android.app I/chromium : [정보 : 콘솔 (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 교차 출처 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.929 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 교차 출처 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.930 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 chrome-extension : //dliochdbjfkdbacpmhlcpmleaejidimm/cast_sender.js를로드 할 수 없습니다. 교차 출처 요청은 HTTP에 대해서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.931 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //hfaagokkkhdbgiakmmlclaapfelnkoah/cast_sender.js. 교차 출처 요청은 HTTP에 대해서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.931 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장자 : //fmfcbgogabcbclcofgocippekhfcmgfj/cast_sender.js를로드 할 수 없습니다. 교차 출처 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (01) 01-15 11 : 21 : 42.931 21328-21328/com.my.android.응용 프로그램 I/크롬 : [INFO : 콘솔 (0)] ".. XMLHttpRequest를가 크롬 확장로드 할 수 없습니다 : //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js 크로스 원산지 요청은 HTTP에 대한 지원을"소스 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.935 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0)] "XMLHttpRequest에서 크롬 확장명 : //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js를로드 할 수 없습니다. 교차 출처 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.939 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 e를로드 할 수 없습니다. xtension : //fmfcbgogabcbclcofgocippekhfcmgfj/cast_sender.js. 교차 출처 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.940 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 교차 출처 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.943 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 교차 출처 요청은 HTTP에 대해서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.946 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //hfaagokkkhdbgiakmmlclaapfelnkoah/cast_sender.js. 크로스 원본 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.947 21328-21328/com.my.android.app I/chromium : [정보 : 콘솔)] "XMLHttpRequest는 크롬 확장자 : //fmfcbgogabcbclcofgocippekhfcmgfj/cast_sender.js를로드 할 수 없습니다. 교차 출처 요청은 HTTP에 대해서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.948 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 크로스 원산지 요청은 HTTP 지원됩니다 ", 소스 :. http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 11월 1일에서 15일까지 : 21 : 42.958 21328-21328가/com.my.android.app I/크롬 : [INFO : 콘솔 (0)] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 교차 출처 요청은 HTTP에 대해서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.961 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장자 : //fmfcbgogabcbclcofgocippekhfcmgfj/cast_sender.js를로드 할 수 없습니다. 크로스 원본 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.962 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 교차 출처 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 42.964 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "XMLHttpRequest는 크롬 확장을로드 할 수 없습니다. //enhhojjnijigcajfphajepfemndkmdlo/cast_sender.js. 크로스 원본 요청은 HTTP에서만 지원됩니다. ", 출처 : http://www.youtube.com/embed/CpaOh4poNms?playsinline=1&enablejsapi=1&origin=http%3A%2F%2Fwww.youtube.com (0) 01-15 11 : 21 : 43.246 21328-21328/com.my.android.app I/chromium : [INFO : CONSOLE (0))] "DOMWindow"에 'postMessage'를 실행하지 못했습니다. '이 (가) 받는 사람 창의 출처 ('http://www.youtube.com ')와 일치하지 않습니다. ", 출처 : (0) 01-15 11 : 01 : 43.305 21328-21328/com.my.android.app I/chromium : " 'DOMWindow'에 'postMessage'를 실행하지 못했습니다. 대상 원점 제공 ('https://www.youtube.com') 받는 사람의 창 출처가 ('http://www.youtube.com')과 일치하지 않습니다. ", 출처 : (0)
웹보기는 HTML은 웹보기
mTargetWebView.loadDataWithBaseURL("http://www.youtube.com", youtubeHTML, "text/html", "utf-8", null);
레이아웃 XML
에로드되는 방법@SuppressLint("SetJavaScriptEnabled")
public void setupWebView(WebView webView) {
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setUseWideViewPort(false);
webSettings.setLoadWithOverviewMode(false);
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webSettings.setSaveFormData(false);
webSettings.setSupportZoom(false);
webSettings.setBuiltInZoomControls(false);
webSettings.setSupportMultipleWindows(false);
webSettings.setAppCacheEnabled(true);
webSettings.setAppCachePath("");
webSettings.setDefaultTextEncodingName("UTF-8");
webSettings.setDomStorageEnabled(true);
webSettings.setAllowFileAccess(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
}
webView.setBackgroundColor(Color.TRANSPARENT);
webView.setVerticalScrollBarEnabled(false);
webView.setHorizontalScrollBarEnabled(false);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
}
private FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
// this will allow the webview to play embedded video and full screen video
mYoutubeVideoViewContainer = (FrameLayout) findViewById(R.id.fullscreen_youtube_video);
mWebChromeClient = new WebChromeClient() {
@Override
public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
// if a view already exists then immediately terminate the new one
if (mCustomView != null)
{
callback.onCustomViewHidden();
return;
}
// Add the custom view to its container.
mYoutubeVideoViewContainer.addView(view, COVER_SCREEN_GRAVITY_CENTER);
mCustomView = view;
mCustomViewCallback = callback;
// hide main browser view
mContentFlipper.setVisibility(View.GONE);
// Finally show the custom view container.
mYoutubeVideoViewContainer.setVisibility(View.VISIBLE);
mYoutubeVideoViewContainer.bringToFront();
}
@Override
public void onHideCustomView()
{
if (mCustomView == null) {
return;
}
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// Hide the custom view.
mCustomView.setVisibility(View.GONE);
// Remove the custom view from its container.
mYoutubeVideoViewContainer.removeView(mCustomView);
mCustomView = null;
mYoutubeVideoViewContainer.setVisibility(View.GONE);
mCustomViewCallback.onCustomViewHidden();
// Show the content view.
mContentFlipper.setVisibility(View.VISIBLE);
}
};
mTargetWebView.setWebChromeClient(mWebChromeClient);
mTargetWebView.setWebViewClient(new WebViewClient());
를 초기화하는 방법
내가 무엇을 놓쳤는가?
PROGRESS ... 나는 안드로이드 (5.0) 웹보기 작업이 쓰레기를 얻을 수있는 유일한 방법은 다음과 같은 HTML을 사용하는 것입니다
...
<html>
<body>
<iframe width="100%" height="100%" src="http://www.youtube.com/embed/CpaOh4poNms?rel=0&autoplay=1" frameborder="0" allowfullscreen></iframe>
</body>
</html>
적어도이 동영상 플레이어가 표시됩니다. 이 모든 동적 DIV - 투 - iframe이 쓰레기는 안드로이드에 완전히 비 작동 : https://developers.google.com/youtube/iframe_api_reference#Getting_Started
는'Started' HTML을 얻기 같은 방법으로 실패 https://developers.google.com/youtube/iframe_api_reference : HTML의 구성/facepalm –