如何将jQuery事件处理程序附加到YouTube电影?

[编辑:对于那些已经回答的人 – 抱歉 – 在我睡眠不足的状态下,我忘记了这种特殊情况是YouTube电影,而不是JW FLV播放器。 我可以看到有更多关于与YouTube电影互动的文档,所以我会追求这一点,但也欢迎更多信息]

我正在使用jQuery循环插件( http://malsup.com/jquery/cycle/ )在正在轮换的div集合中使用嵌入式YouTubevideo。

当我点击其中一部电影开始播放时,我希望循环停止,但我无法弄清楚如何将jQuery事件处理程序附加到播放器对象。

这是我当前代码的样子(你不能直接用jQuery选择一个对象标签,所以我选择父div然后将object元素作为第一个子元素):

$("div.feature-player").children(":first").click(function(event) { $('#features').cycle('stop'); }); 

但这并不能解决问题。 我不是Flash的作者,所以我对ActionScript并不熟悉,之前我从未在JavaScript和Flash电影之间建立过互动。

谢谢你的帮助!

– 保罗

YouTube播放器API非常简单。 您只需要监听onStateChange事件并根据状态控制循环插件:

这是一个工作演示: http : //jsbin.com/izolo (可通过http://jsbin.com/izolo/edit编辑)

以及相关代码:

 function handlePlayerStateChange (state) { switch (state) { case 1: case 3: // Video has begun playing/buffering videoContainer.cycle('pause'); break; case 2: case 0: // Video has been paused/ended videoContainer.cycle('resume'); break; } } function onYouTubePlayerReady(id){ var player = $('#' + id)[0]; if (player.addEventListener) { player.addEventListener('onStateChange', 'handlePlayerStateChange'); } else { player.attachEvent('onStateChange', 'handlePlayerStateChange'); } } 

就javascript而言,Flash电影几乎是黑盒子。 如果您使用的SWF没有被编写为与javascript交互,那么您可能运气不好。

您要么需要弄清楚您正在使用的电影所使用的javascript方法(希望它有文档),找到另一个提供javascript交互的方法,或者编写自己的SWF来处理它。

您正在寻找的是Flash ExternalInterface类,它用于从flash到javascript以及从javascript到flash的通信。

如果您使用swfobject嵌入播放器,则需要使用swfobject.getObjectById来获取对电影的引用。 阅读文档,了解为什么需要这样做。

此外,您还需要为播放器设置{wmode:“transparent”},以便将点击事件冒泡到JavaScript。