2010-06-04 81 views
2

我正在尝试使用youtube的javascript api,并且在初始化它时遇到问题/在准备好时收到回调。 Api文档可以在here找到。youtube javascript api不会触发回调

我碰到由YouTube提供的JSON的视频和嵌入他们是这样的:

//insert flash object in video element 
     $(video_elm_arr[i]).append('<object id="video_' + i + '" width="' + width + '" height="' + height + '">' + 
            '<param name="movie" value="' + video_url + '?showinfo=0&enablejsapi=1"></param>' + 
            '<param name="allowFullScreen" value="true"></param>' + 
            '<param name="allowscriptaccess" value="always"></param>' + 
            '<embed src="' + video_url + '?showinfo=0&enablejsapi=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="' + width + '" height="' + height + '"></embed>' + 
            '</object>'); 

请注意,我加入“enablejsapi = 1”,应使JavaScript API的网址。但是,当我收听api准备就绪的回调时,即:

//set player functionality when javascript api is available 
    function onYouTubePlayerReady(playerId) { 
    alert('api is ready!'); 
    } 

它永远不会被触发。网页上的其他所有内容(包括youtube视频)都可以正确加载,甚至我在视频网址(showinfo = 0)中传递的其他参数也能正常运行。是什么赋予了?任何人看到我的错误?所有帮助非常感谢...

+0

我知道YouTube建议“SwfObject的”,但它不是我的情况选择... – danwoods 2010-06-05 01:45:53

+0

我发现解决这个问题(只使用缩略图是合理的什么,我需要)的方式,但我'd仍然想知道答案:) – danwoods 2010-06-05 04:44:43

回答

1

页面是从服务器(即不是从本地计算机)提供?如果页面在本地提供,Youtube(或一般的Flash)不允许与JavaScript交互。

0

尝试将URL添加到&playerapiid=THEPLAYERIDYOUWANTPASSEDIN。这将作为“playerId”参数发送到回调函数。

//insert flash object in video element 
     $(video_elm_arr[i]).append('<object id="video_' + i + '" width="' + width + '" height="' + height + '">' + 
            '<param name="movie" value="' + video_url + '?showinfo=0&enablejsapi=1&playerapiid=' + i + '"></param>' + 
            '<param name="allowFullScreen" value="true"></param>' + 
            '<param name="allowscriptaccess" value="always"></param>' + 
            '<embed src="' + video_url + '?showinfo=0&enablejsapi=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="' + width + '" height="' + height + '"></embed>' + 
            '</object>');