2012-11-20 79 views
1

我已經通過了iframe代碼內嵌一些YouTube視頻一個UIWebView:YouTube上的UIWebView只播放一次

<iframe width="190" height="102" src="http://www.youtube.com/embed/...?showinfo=0" frameborder="0" allowfullscreen></iframe> 

首次加載時,可以查看每個視頻一次。在觀看它之後,該區域只是黑色,其中有白色的「Youtube」。

任何想法?當然,在觀看視頻後重新加載UIWebView會修復它,但我不喜歡這樣...

+0

沒有其他人有這個問題? – maniac

+0

你能解決這個問題嗎?我收到「此視頻目前無法使用」。 – Salil

+0

不,我嘗試了YouTube的iframe api,以獲得播放完成時的事件,所以我可以重新加載相應的iframe,但我沒有成功呢... – maniac

回答

1

我做到了!以下JavaScript做了這個工作:

<script> 
VideoIDs = new Array(...some ids here...); 

function getFrameID(id){ 
    var elem = document.getElementById(id); 
    if (elem) { 
    if(/^iframe$/i.test(elem.tagName)) 
    return id; 
    var elems = elem.getElementsByTagName("iframe"); 
    if (!elems.length) 
    return null; 
    for (var i=0; i<elems.length; i++) { 
    if (/^https?:\/\/(?:www\.)?youtube(?:-nocookie)?\.com(\/|$)/i.test(elems[i].src)) 
    break; 
    } 
    elem = elems[i]; 
    if (elem.id) 
    return elem.id; 
    do { 
    id += "-frame"; 
    } while (document.getElementById(id)); 
    elem.id = id; 
    return id; 
    } 
    return null; 
} 

var YT_ready = (function(){ 
    var onReady_funcs = [], api_isReady = false; 
    return function(func, b_before){ 
    if (func === true) { 
    api_isReady = true; 
    for (var i=0; i<onReady_funcs.length; i++){ 
    onReady_funcs.shift()(); 
    } 
    } else if(typeof func == "function") { 
    if (api_isReady) 
    func(); 
    else 
    onReady_funcs[b_before?"unshift":"push"](func); 
    } 
    } 
})(); 

function onYouTubePlayerAPIReady() { 
    YT_ready(true) 
} 

(function(){ 
    var s = document.createElement("script"); 
    s.src = "http://www.youtube.com/player_api"; 
    var before = document.getElementsByTagName("script")[0]; 
    before.parentNode.insertBefore(s, before); 
})(); 

var players = new Array(); 
YT_ready(function() { 
    for(index in VideoIDs) { 
    var frameID = getFrameID(VideoIDs[index]); 
    if (frameID) { 
    players[frameID] = new YT.Player(frameID, { 
    events: { 
     "onStateChange": stateChange 
    } 
    }); 
    } 
    } 
}); 

function youtube_parser(url){ 
    var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/; 
    var match = url.match(regExp); 
    if (match&&match[7].length==11){ 
    return match[7]; 
    } 
} 

function stateChange(event) { 
    if(event.data == YT.PlayerState.ENDED){ 
    document.location = 'callback:finished'; 
    document.getElementById(youtube_parser(event.target.getVideoUrl())).contentWindow.location.reload(true); 
    } 
} 
</script>