API YouTube, jQuery attr не будет менять атрибуты элемента - PullRequest
0 голосов
/ 27 апреля 2010

JavaScript (jQuery)

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>

Я проанализировал API YouTube для видео на моем канале пользователя.

Гиперссылка, указанная выше, генерируется php и предназначена для запуска вышеуказанной функции JavaScript и замены URL-адреса из атрибутов, содержащихся в идентификаторах "movie_url" и "embed_url", так же, как и в FF, но IE будет выполнять только. команды css.

Мне кажется, что IE не нравится, когда я присваиваю идентификаторы PARAM и EMBED.

1 Ответ

0 голосов
/ 28 апреля 2010

Исправлено! Мой новый код указан ниже. Проблема заключалась в том, что IE обрабатывал параметры Flash (не выполнял асинхронное обновление параметров для объекта). В 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!

...