Изменить видео Vimeo с помощью JQuery

Как я могу изменить идентификатор встроенного видео Vimeo? Вот код для встраивания, например:

<object width="578" height="325">
<param name="allowfullscreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11527784&amp;
server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" />
<embed src="http://vimeo.com/moogaloop.swf?clip_id=11527784&amp;
server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;
color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" 
allowscriptaccess="always" width="578" height="325"></embed></object>

Как я могу изменить clip_id как в значении объекта, так и в источнике встраивания, используя JQuery или просто чистый javascript?

Эффект, который это имеет, заключается в том, что он меняет видео. Я протестировал это в Firefox, если это не будет работать во всех браузерах, сообщите мне!

Спасибо всем за любую помощь


person Abs    schedule 03.06.2010    source источник


Ответы (3)


Я не уверен, «когда» вы хотите заменить его, поэтому я сделал это по щелчку. Попробуй это:

$('#change_me').click(function() {
    var val = $('embed').attr('src').replace(/clip_id=(?=\d).\d+/g, 'clip_id='+new_id);


    $('embed').attr('src', val);
    alert($('embed').attr('src'));
});

Это регулярное выражение найдет clip_id, за которым следуют любые числа и только числа, и заменит их новым идентификатором. Вы можете сделать это для обоих URL-адресов, содержащих clip_id. Я почти уверен, что это будет работать во всех браузерах, хотя я не могу проверить это прямо сейчас.

Примечание. Я уверен, что можно было бы использовать лучшее регулярное выражение, но я не особенно хорошо с ними разбираюсь, так что это все, что я могу придумать.

Надеюсь это поможет

person realshadow    schedule 03.06.2010
comment
Что такое селектор: $('embed') кажется, он не работает с этим селектором? - person Abs; 03.06.2010
comment
Он выберет тег ‹embed›‹/embed›, хотя, если на вашем сайте есть несколько флэш-роликов, он выберет первый на вашем сайте, поэтому вам придется изменить селектор для работы с вашим кодом, например. вы должны использовать $('param[name=movie]') для выбора clip_id в теге param. Вероятно, лучшим способом было бы обернуть его в какой-нибудь div. - person realshadow; 04.06.2010

Для этого есть некоторые последствия для разных браузеров.

Возможно, вы захотите взглянуть на другой вопрос о SO.

Для этого вам следует использовать подключаемый модуль SWFObject, как указано SolutionYogi.

Вот еще один связанный с этим вопрос: Как использовать javascript для замены swf в html ?

person sirhc    schedule 03.06.2010
comment
Спасибо за ответ. О каких кроссбраузерных последствиях вы говорите? - person Abs; 03.06.2010
comment
Загрузка файлов Flash в старых браузерах может быть довольно сложной. Я где-то читал, что вам нужно перезагрузить элемент объекта в DOM, чтобы он загрузился. Я не могу найти ссылку на это в данный момент. Между тем, есть список причин использовать SWFObject поверх в этой ветке форума. - person sirhc; 04.06.2010

    var params = document.getElementsByTagName("param");
    var clip_url = 11527780;
    var vimeo = "http://vimeo.com/moogaloop.swf?clip_id=" + clip_url + "&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1";
    params[2].setAttribute("value", vimeo);

    var embed = document.getElementsByTagName("embed");
    embed[0].setAttribute("src", vimeo);

clip_url — это идентификатор видео vimeo.

person Wai Wong    schedule 03.06.2010
comment
Работал как угощение в Firefox, но попробовал его в IE8, и я получил эту ошибку: Message: '2' is null or not an object. - person Abs; 03.06.2010
comment
В строке 18 написано, что это ошибка. Я не совсем уверен, что это может быть. Я пробую это в других браузерах. Изменить: похоже, это тоже не работает с Chrome. Я предполагаю, что код DOM не работает для встроенных видео. - person Wai Wong; 04.06.2010