Я использую два разных плагина, для которых требуется функция onyoutubeplayerready:
http://code.google.com/p/jquery-tubular/
http://badsyntax.github.com/jquery-youtube-player/examples/player.html
Оба они объявляют и инициализируют функцию onyoutubeplayerready.Следовательно, один из плагинов не работает.
У меня есть три тега head:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
<script type="text/javascript" src="js/jquery.youtube.player.js"></script>
<script type="text/javascript" charset="utf-8" src="js/jquery.tubular.js"></script>
Оба сценария определены непосредственно перед конечным тегом body:
<script type="text/javascript">
//<![CDATA[
(function($){
var config = {
repeatPlaylist: 1,
// Custom playlist
playlist: {
title: 'Random videos',
videos: [
{ id: 'CJCTiC1po8E', title: 'VCore Intro'},
{ id: 'ydCF922o944', title: 'VCore Admin' },
{ id: 'yC-_eqPqaoY', title: 'VCore Admin System' },
{ id: '7qkE30S2Btk', title: 'VCore Site' }
]
}
/*
// Youtube playlist
playlist: {
playlist: '71B8152559FA2805'
}
// Latest user videos
playlist: {
user: 'TheSensless'
}
*/
};
$('.youtube-player').player(config)
})(this.jQuery);
//]]>
</script>
<script type="text/javascript">
(function($){
function initializeTub(){
$('body').tubular('_VKW_M_uVjw','wrapper');
}
$('a').click(function(){initializeTub()}); //clicking a random link just to test it
})(jQuery)
</script>
@ epascarello
Я попробовал ваше решение.У того, кто идет первым, есть это:
window.onYouTubePlayerReady = function(id){
console.log('2');
var player = document.getElementById(id);
player.addEventListener("onStateChange", 'onytplayerStateChange' + id);
player.addEventListener('onError', 'onytplayerStateChange' + id);
window['onytplayerStateChange' + id](9);
};
У того, кто идет вторым, есть это:
var _onYouTubePlayerReady = onYouTubePlayerReady;
function onYouTubePlayerReady(playerId) {
console.log('1');
ytplayer = document.getElementById("myytplayer");
ytplayer.setPlaybackQuality('medium');
ytplayer.mute();
_onYouTubePlayerReady( playerId );
}
Консоль выводит это:
2
2
Следовательно, тот, который объявлен первым, называется оба раза.И второй никогда не вызывается, потому что консоль никогда не выдает 1.
Но согласно книге Справочник программиста JavaScript:
In fact, if you attempt to overload a function, the most recent definition will be used. This is because of the mutable nature of objects such as functions.
Так что если это так:
<script type="text/javascript" src="js/jquery.youtube.player.js"></script>
<script type="text/javascript" charset="utf-8" src="js/jquery.tubular.js"></script>
Поскольку одна функция, определенная в tubular, стоит на втором месте, почему она не указана, когда функция в конце концов вызывается?Обратите внимание, что на втором месте стоит трубчатый скрипт.
Кроме того, решение Фреда тоже не сработало.
Я попробовал это и тоже не сработало:
var _onYouTubePlayerReady = onYouTubePlayerReady;
function _onYouTubePlayerReady(playerId) {
console.log('1');
ytplayer = document.getElementById("myytplayer");
ytplayer.setPlaybackQuality('medium');
ytplayer.mute();
}
_onYouTubePlayerReady( playerId );
ByКстати, я понятия не имею, когда это вызывается, по-видимому волшебным вызовом Google в какой-то момент, но определенно не в любом из сценариев, поставляемых с плагином.
Спасибо за ответ.