gpt4 book ai didi

javascript - YouTube API 无法在 iOS (iPhone/iPad) 中运行,但在桌面浏览器中运行良好?

转载 作者:可可西里 更新时间:2023-11-01 03:40:02 26 4
gpt4 key购买 nike

我在一个简单的单页网站中使用 YouTube API。我能够播放视频并且我的所有 YouTube 功能在桌面浏览器中都能成功运行(IE 7 除外——也许这个问题会在你帮助我回答这个问题时得到解决)但它似乎不起作用在 iOS(iPhone 和 iPad)中完全没有。YouTube 播放器根本不显示,并且在 iOS 中根本没有 YouTube 功能的内存。

下面是我的代码实现。如果有任何我没有提供的问题信息对这个问题有帮助,请告诉我。我想尽可能简单地开始解决这个问题,然后在必要时提供更多信息。

/*==========================================================================
YOUTUBE
========================================================================== */
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 YTready = false,
playerIdList = [],
ytPlayers = {};

// When YouTube API is ready, switch YTready to true and run the queue of videos should any exist
// and run a list of page-specified functions such as carousel setups
var YTreadyFunctions = {};
function onYouTubeIframeAPIReady() {
console.log('YT Ready');
YTready = true;
if (playerIdList.length > 0) {
runYouTubeIframeList(playerIdList);
}
for(id in YTreadyFunctions){
var thisFunc = YTreadyFunctions[id];
var thisArgs = thisFunc.args;
thisFunc.func(thisArgs.id,thisArgs.counters,thisArgs.isHome,thisArgs.isAutoRot,thisArgs.galleryType);
}
}

function shortID(elemId){
return elemId.split('-').join('');
}

function initializeYouTubeIframe(playerId,params){
//var playerId = thisList[x];
var thisPlayer = document.getElementById(playerId);
ytPlayers[shortID(playerId)] = new YT.Player(playerId, {
width: thisPlayer.getAttribute('width'),
height: thisPlayer.getAttribute('height'),
playerVars: {
autohide: 1,
//autoplay: 1,
theme: 'light',
showinfo: 0,
color: 'white',
rel: 0,
origin: document.location.hostname,
wmode: 'transparent'
},
videoId: playerId,
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}

function runYouTubeIframeList(thisList) {
// If the YouTube iFrame API (onYouTubeIframeAPIReady is not ready yet,
// add the player(s) to a list (playerIdList) to wait until the API is ready and then initialize
if (!YTready) {
playerIdList.concat(thisList);
} else {
// YT API is ready. Initialize the list of player iframes.
var thisListLength = thisList.length;
for (var x = 0; x < thisListLength; x++) {
initializeYouTubeIframe(thisList[x]);
}
}
}
function onPlayerReady(event) {
//alert('player ready');
}
function onPlayerStateChange(event) {
//alert('state changed: ' + event.data);
if (event.data == 3) {
$('.loading').remove();
}
if (event.data == 1) {
$('#i360-static-panel').css('display','none');
$('.loading').remove();
$('div#i360-questions > h2').fadeIn(500).removeClass('transparent');
}
if (event.data == 0) {
$('#i360-answer-mask').slideUp(function () {
$('p.active-answer').remove();
$('div#i360-questions > ul').fadeIn(500).removeClass('transparent');
$('div#i360-questions > ul > li').removeClass('i360-clicked-question');
});
$('.i360-shown').fadeOut(300);
$(event.target.a.parentNode).children('#i360-static-panel').css('display','block');
}
}

// run through all yt-players and add their ID to a list of to-be-initialized players
$('.yt-player').each(function(i){
playerIdList.push($(this).attr('id'));
});
runYouTubeIframeList(playerIdList);

function setVideoCarouselThumb(response,element){
if(response.data){
if(response.data.thumbnail.hqDefault){
element.getElementsByTagName('img')[0].src = response.data.thumbnail.hqDefault;
} else if(response.data.thumbnail.sqDefault){
element.getElementsByTagName('img')[0].src = response.data.thumbnail.sqDefault;
}
} else if (response.status){
if(response.status == '403'){
element.setAttribute('class',element.getAttribute('class') ? element.getAttribute('class') + ' private' : 'private');
}
}
}
function getYouTubeInfoById(type,getID,callback,args){
//window.console && console.log('function: getYouTubeInfoById | type = ',type,' | getId = ',getID,' | args = ',args);
//consoleThis('https://gdata.youtube.com/feeds/api/' + type + '/' + getID + '?v=2&prettyprint=true&alt=jsonc');
$.ajax({
url: 'https://gdata.youtube.com/feeds/api/' + type + '/' + getID + '?v=2&prettyprint=true&alt=jsonc',
dataType: 'jsonp',
context: args ? args : '',
success: function(response){
callback(response,this);
},
error: function(response){
callback(response,this);
//consoleThis(response);
}
});
}

// END YOUTUBE
</script>


<meta name="apple-mobile-web-app-title" content="Roundup" />
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="Roundup" />
<meta name="viewport" content="minimum-scale=1.0, maximum-scale=1.0">

最佳答案

根据 this other SO post ,在 iOS 上存在限制,其中 “......无法在 iOS 上的 Safari 中以编程方式自动播放嵌入式媒体 - 用户始终启动播放。”

我有同样的问题,事实证明你可以有一个 YouTube-API IFrame 正确嵌入并显示在 iOS 上,带有 YouTube 的大红色“播放”按钮,只是 iOS 不允许您可以使用自己的控件和 JavaScript 开始/停止视频。例如。您可以使用 JavaScript 进行下一个/上一个,但不能播放/暂停,这必须通过点击视频,然后使用视频进度条旁边的 native 控件来完成。

但关于您第一段的最后一句话并撇开这些限制,YouTube 播放器应该显示您所做的事情有问题(虽然我不够专业,无法判断是什么).我也在 a simple one-page website 中这样做,随时看看我做了什么。

希望对您有所帮助!

关于javascript - YouTube API 无法在 iOS (iPhone/iPad) 中运行,但在桌面浏览器中运行良好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16513620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com