2010-04-27 69 views
0

的JavaScript(jQuery的)的YouTube API,jQuery的ATTR會不會掉元素屬性

function display_youtube(new_url) { 
    $('#movie_url').removeAttr('value'); 
    $('#embed_url').removeAttr('src'); 
    $(document).ready(function() { 
     $('#movie_url').attr('value', new_url); 
     $('#embed_url').attr('src', new_url); 
     $('#shade').css('display', 'block'); 
     $('#youtube_player').css('display', 'block'); 
     $('#exit_youtube').css('display', 'block'); 
    }); 
} 

HTML

<object width="720" height="480"> 
<param id="movie_url" name="movie" value="http://www.youtube.com/v/_eaToCSn7yU?f=user_uploads&app=youtube_gdata&autoplay=0" /> 
<param name="allowFullScreen" value="true" /> 
<param name="allowscriptaccess" value="always" /> 
<embed id="embed_url" src="http://www.youtube.com/v/_eaToCSn7yU?f=user_uploads&app=youtube_gdata&autoplay=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="720" height="480" /> 
</object> 

超鏈接

<a href="javascript:display_youtube('http://www.youtube.com/v/_eaToCSn7yU?f=user_uploads&app=youtube_gdata&autoplay=1');">Click Here for Fun!</a> 

我所做的解析YouTube的API我的用戶頻道上的視頻。

上面的超鏈接是php生成的,意在觸發上面的JavaScript函數,並且從包含在id「movie_url」和「embed_url」中的屬性交換URL的作用就像它應該在FF中一樣,但IE只會執行.css命令。

我的猜測是IE不喜歡我給PARAM和EMBED分配ID。

+0

看起來像http://stackoverflow.com/questions/1081656/object-param-jquery的副本 – 2010-04-27 00:57:23

回答

0

修好了!我的新代碼列在下面。問題在於IE對Flash參數的處理(不會執行該對象的params的異步刷新)。它在FF中工作正常,因爲它嵌入了視頻,而不是將其作爲對象處理。

新的JavaScript

function display_youtube(new_url) { 
    $('#object_url').replaceWith('<param id="object_url" name="movie" value="' +new_url+ '" />'); 
    $('#embed_url').replaceWith('<embed id="embed_url" src="' +new_url+ '" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="720" height="480" />'); 
    $('#shade').css('display', 'block'); 
    $('#youtube_player').css('display', 'block'); 
    $('#exit_youtube').css('display', 'block'); 
} 
function exit_youtube() { 
    $('#object_url').replaceWith('<param id="object_url" />'); 
    $('#embed_url').replaceWith('<embed id="embed_url" />'); 
    $('#shade').css('display', 'none'); 
    $('#youtube_player').css('display', 'none'); 
    $('#exit_youtube').css('display', 'none'); 
} 

新的HTML

<object width="720" height="480"> 
    <param id="object_url" /> 
    <param name="allowFullScreen" value="true" /> 
    <param name="allowscriptaccess" value="always" /> 
    <embed id="embed_url" /> 
</object> 

我認爲這裏的訣竅是迫使IE瀏覽器依靠指令從jQuery的,然後才能對對象執行不得以任何行動,效果防止IE從一開始就緩存任何參數。 FTW!