Не удается получить атрибут объекта в IE8 - PullRequest
1 голос
/ 13 декабря 2010

У меня есть следующая проблема, которую я не могу понять. Я домашняя страница на моем блоге WP, которая содержит несколько видео на YouTube. Моя задача - получить все URL-адреса YouTube из объектов YouTube на странице.

Итак, я сделал что-то вроде этого:

jQuery("object").each(function() {
  $ytbURL = jQuery(this).find("embed").attr("src");
  $ytbID = $ytbURL.match(...); //here I got error from IE8 that ytbURLis null or not and object
});

На FF работает без нареканий.

Обновление 15/12: Вот примеры кода.

IE8 - Инструменты разработчика:

<OBJECT codeBase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" classid=clsid:d27cdb6e-ae6d-11cf-96b8-444553540000 width=320 height=267><PARAM NAME="_cx" VALUE="8466"><PARAM NAME="_cy" VALUE="7064"><PARAM NAME="FlashVars" VALUE=""><PARAM NAME="Movie" VALUE="http://www.youtube.com/v/TDlqMuGqTyE?fs=1&amp;hl=en&amp;fs=1&amp;rel=0"><PARAM NAME="Src" VALUE="http://www.youtube.com/v/TDlqMuGqTyE?fs=1&amp;hl=en&amp;fs=1&amp;rel=0"><PARAM NAME="WMode" VALUE="Transparent"><PARAM NAME="Play" VALUE="0"><PARAM NAME="Loop" VALUE="-1"><PARAM NAME="Quality" VALUE="High"><PARAM NAME="SAlign" VALUE="LT"><PARAM NAME="Menu" VALUE="-1"><PARAM NAME="Base" VALUE=""><PARAM NAME="AllowScriptAccess" VALUE=""><PARAM NAME="Scale" VALUE="NoScale"><PARAM NAME="DeviceFont" VALUE="0"><PARAM NAME="EmbedMovie" VALUE="0"><PARAM NAME="BGColor" VALUE=""><PARAM NAME="SWRemote" VALUE=""><PARAM NAME="MovieData" VALUE=""><PARAM NAME="SeamlessTabbing" VALUE="1"><PARAM NAME="Profile" VALUE="0"><PARAM NAME="ProfileAddress" VALUE=""><PARAM NAME="ProfilePort" VALUE="0"><PARAM NAME="AllowNetworking" VALUE="all"><PARAM NAME="AllowFullScreen" VALUE="true">
<embed type="application/x-shockwave-flash" width="320" height="267" src="http://www.youtube.com/v/TDlqMuGqTyE?fs=1&amp;hl=en&amp;fs=1&amp;rel=0" allowfullscreen="true" wmode="transparent"></embed></OBJECT>

Wordpress:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="320" height="267" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="wmode" value="transparent" /><param name="allowfullscreen" value="true" /><param name="src" value="http://www.youtube.com/v/TDlqMuGqTyE?fs=1&amp;hl=en&amp;fs=1&amp;rel=0" /><embed type="application/x-shockwave-flash" width="320" height="267" src="http://www.youtube.com/v/TDlqMuGqTyE?fs=1&amp;hl=en&amp;fs=1&amp;rel=0" allowfullscreen="true" wmode="transparent"></embed></object>

Похоже, что IE8 вносит некоторые изменения в исходный HTML или, может быть, это так, как Developer Tools отображает его?

Thanx

Sam

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Я бы попробовал использовать удивительную $ функцию jQuery вместо jQuery и посмотреть, работает ли она:

$('object').each(function()
{
  $ytbURL = $(this).find('embed').attr('src');
  $ytbID = $ytbURL.match(...);
});

Я сомневаюсь, что будет разница, но она может сработать.О, и вот вам действительно полезное регулярное выражение для захвата идентификаторов видео на YouTube: (?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+.

Удачи!


Попробуйте это.Кроме того, не могли бы вы привести пример DOM-анализа, который выполняет jQuery?Это может быть связано с тем, что существует несколько тегов <embed>, поэтому jQuery(this).find('embed') будет возвращать массив, а не один объект.

jQuery('object').each(function()
{
  $ytbURL = jQuery(this).children('embed:eq(0)').attr('src');
  $ytbID = $ytbURL.match(...);
});
0 голосов
/ 17 декабря 2010

Хорошо, ребята, после того, как мы выяснили, что IE не поддерживает тег <embed>, решение было искать <param> тег с исходным URL внутри <object>. Вот код, который работал для меня:

jQuery("object").each(function(){
        var $params = jQuery(this).children('param');
        $params.each(function() {
                if((jQuery(this).attr('name')) == 'src') {
                    $ytbURL = jQuery(this).val();
                    return;
                }
        });

});

Используйте это на свой страх и риск :). Теперь мне еще нужно выяснить, как автоматически воспроизводить новый объект, но это уже другая история:) ...

Спасибо всем, кто помог мне в этом вопросе, особенно Блендеру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...