我正在尝试编写一个检测嵌入对象的javascript函数。作为我3小时研究的结果,我发现在html中使用.swf文件有两种主要方法
对象标记,例如:<object data="intro.swf" height="200" width="200"/>
嵌入代码,例如:<embed src="intro.swf" height="200" width="200"/>
但是第三种方法是跨浏览器,并且更常见:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0"
width="100"
height="100">
<param name="movie" value="sample.swf">
<param name="quality" value="high">
<embed src="sample.swf" quality="high" width="100" height="100"
type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
我找到了一个函数here:
function getFlashMovieObject(movieName) {
if (window.document[movieName]) {
return window.document[movieName];
}
if (navigator.appName.indexOf("Microsoft Internet") == -1) {
if (document.embeds && document.embeds[movieName])
return document.embeds[movieName];
}
else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
{
return document.getElementById(movieName);
}
}
但是这个函数将id / Name属性作为参数,对我不利。 我认为首先检测浏览器然后查找flash对象会更好。 我还在努力。 我该怎么做来检测RENDERED flash对象??
答案 0 :(得分:1)
这个怎么样:
jQuery的:
$('object:has(embed)');
Vanilla JS:
function getCompleteObjects () {
var objects = document.getElementsByTagName('object'),
len = objects.length,
complete = [],
i = 0;
for (; i < len; i++) {
var embed = objects[i].getElementsByTagName('embed');
if (embed) {
complete.push(objects[i]);
}
}
return complete;
}
jQuery小提琴:http://jsfiddle.net/Kai/9vFgT/
Vanilla JS小提琴:http://jsfiddle.net/Kai/WZEvF/