我使用要求onyoutubeplayerready函數的兩個不同的插件:在JavaScript中調用多個函數而不覆蓋原始 - 多態性問題?
http://code.google.com/p/jquery-tubular/
http://badsyntax.github.com/jquery-youtube-player/examples/player.html
他們兩個聲明並初始化onyoutubeplayerready功能。因此,其中一個插件最終無法工作。
我有這三頭標籤:
<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>
腳本的兩個結束標記之前正確的定義:
<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>
由於一個功能爲什麼不是在函數最終被調用時指向的那個?注意管狀腳本排在第二位。
此外,弗雷德的解決方案也沒有工作。
我想這和它沒有工作,要麼:
var _onYouTubePlayerReady = onYouTubePlayerReady;
function _onYouTubePlayerReady(playerId) {
console.log('1');
ytplayer = document.getElementById("myytplayer");
ytplayer.setPlaybackQuality('medium');
ytplayer.mute();
}
_onYouTubePlayerReady(playerId);
順便說一句,我沒有在這個被稱爲線索,顯然是神奇地調用谷歌在某些時候,但肯定不是在任何插件附帶的腳本。
感謝您的回覆。
所以,你想一個代碼修復的人嗎? – Fred 2010-12-16 02:10:11
是的,我沒有看到函數被調用的地方。 – JohnMerlino 2010-12-16 02:12:46