我有以下无法弄清楚的问题。 我是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&hl=en&fs=1&rel=0"><PARAM NAME="Src" VALUE="http://www.youtube.com/v/TDlqMuGqTyE?fs=1&hl=en&fs=1&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&hl=en&fs=1&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&hl=en&fs=1&rel=0" /><embed type="application/x-shockwave-flash" width="320" height="267" src="http://www.youtube.com/v/TDlqMuGqTyE?fs=1&hl=en&fs=1&rel=0" allowfullscreen="true" wmode="transparent"></embed></object>
看起来IE8对源HTML进行了一些更改,或者可能是开发人员工具显示它的方式?
感谢名单
萨姆
答案 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。