我想要說我已經盡了最大努力避免這種重複的問題,即搜索谷歌我自己,讀了很多其他類似的問題,等等。我發現了很多真正有用的東西,這些東西讓我看到了我有代碼顯示的具體情況,所以希望我的最後一個問題能夠清晰並且可以回答。
我有一個簡單的網站用純HTML和Bootstrap爲CSS構建。在主頁上有一個嵌入式的全屏Youtube視頻,展示一些歌手。所以視頻的聲音是想要的,但我也想要一個靜音按鈕,而不必提供YouTube視頻的所有控制(暫停/播放,質量,字幕等)。
我已經在使用其開發者頁面上的Youtube API的JSFiddle中成功實現了這一點。 http://jsfiddle.net/Bvance/8bzxp9c2/
問題:
的問題是,從工作的jsfiddle在我的網站完全相同的代碼我得到的錯誤 Uncaught TypeError: player.isMuted is not a function at HTMLDivElement.<anonymous> (main.js:154)
這裏是我的HTML:
<div class="container-fluid video-background" id="home">
<iframe id="myPlayer" width="100%" height="100%" src="https://www.youtube.com/embed/videoseries?list=PLr3L2qYLOPjj8caQDOfdhuvHSWQdrUAjq&
autoplay=1
&disablekb=1
&enablejsapi=1
&loop=1
&controls=0
&mute=0
&index=1
" frameborder="0" allowfullscreen></iframe>
<a href="#welcome" title="Welcome" id="welcome-down">
<span class="glyphicon glyphicon-chevron-down"></span>
</a>
<div id="muteButton">
</div>
這裏是我的javascript:
//Necessary to laod the Youtube API
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() {
console.log(player);
player = new YT.Player('myPlayer', {
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange,
'onError': onPlayerError
}
});
}
function onPlayerError(event) {
alert(event.data);
}
function onPlayerReady() {
alert("hey Im ready");
//do whatever you want here. Like, player.playVideo();
}
function onPlayerStateChange() {
alert("my state changed");
}
//Setting the event listener to the mute button
document.getElementById("muteButton").addEventListener('click', function (event) {
console.log(player);
if(player.isMuted())
{
player.unMute();
} else {
player.mute();
}
});
此JavaScript只是一個完整的文件的片段,但它是文件中的第一件事。我使用了一些JQuery,並在這部分代碼下面有一個$(document).ready{
。我知道把API調用放在那裏是行不通的(我試過了)。
我已經試過什麼:
在我調試我已經印刷player
對象到控制檯之前和之後我做YT.Player()
呼叫和對象返回。雖然由於某種原因,它無法訪問我網站上的任何功能。但是,當檢查JSFiddle代碼時,它會在打印到控制檯時顯示所有內容。
同時使用的jsfiddle Screenshot of console for printed 'player' object
我已經試過移動document.getElementById("muteButton").addEventListener
到不同的地方,包括onYouTubeIframeAPIReady()
內部無濟於事您可以比較這對在控制檯打印選手對象。我也嘗試將這一大塊javascript移到js文件結尾,並在$(document).ready{
之內,以嘗試不同的事情。沒有。
我錯過了什麼? 感謝您的閱讀!
UPDATE:
,所以我用的jsfiddle瞎搞,並試圖削減下來的託管網站代碼,直到它可以像工作的jsfiddle工作,但我甚至到了點兩小提琴是相同的,一個仍然沒有工作。我很難過。我甚至複製並粘貼到一個新的工作小提琴和新的也沒有工作!我真的不知道發生了什麼事。
寧可移動整個API腳本到'jQuery' DOM就緒功能,你是否試圖放置腳本來爲你的靜音按鈕帶來事件監聽器?這應該不會引起問題,因爲'player'已經被定義,並且在綁定靜音事件之前,youtube player API無疑已準備好使用。 – NewToJS
@NewToJS這是一個很好的想法!儘管我嘗試了它並得到了相同的結果:/有一點需要注意的是,即使OnPlayerReady()或onPlayerStateChange()也沒有被引發。所以有些東西搞亂了,並且不允許玩家完全'準備好'... –
也許嘗試將你的'myPlayer'元素從'iframe'換成'div',不太確定爲什麼你有一個iframe,玩家API將負責其餘部分。不是100%肯定會導致這個問題,我現在無法在這個時候爲我自己測試任何東西,否則我會檢查並給你一個確定的答案。 – NewToJS