无法在IE8中获取对象属性

时间:2010-12-13 11:11:25

标签: javascript jquery internet-explorer youtube

我有以下无法弄清楚的问题。 我是WP博客上的主页,其中包含一些YouTube视频。 我的任务是从页面上的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进行了一些更改,或者可能是开发人员工具显示它的方式?

感谢名单

萨姆

2 个答案:

答案 0 :(得分:1)

我会尝试使用jQuery的真棒$函数而不是jQuery,看看它是否有效:

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

我怀疑会有什么不同,但它可能会奏效。哦,这是一个真正有用的YouTube视频ID抓取器正则表达式,以防万一你需要它:(?<=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(...);
});

答案 1 :(得分:0)

好的,在我们发现IE不支持<embed>标签后,解决方案是 在<param>内搜索包含源网址的<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;
                }
        });

});

使用此风险自负:)。 现在我仍然需要弄清楚如何自动播放新对象,但这是另一个故事:)...

对所有帮助我解决问题的人,特别是Blender。