使用javascript / jQuery查找嵌入对象(esp flash文件)

时间:2012-02-19 07:04:56

标签: javascript flash

我正在尝试编写一个检测嵌入对象的javascript函数。作为我3小时研究的结果,我发现在html中使用.swf文件有两种主要方法

  1. 对象标记,例如:<object data="intro.swf" height="200" width="200"/>

  2. 嵌入代码,例如:<embed src="intro.swf" height="200" width="200"/>

  3. 但是第三种方法是跨浏览器,并且更常见:

    <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对象??

1 个答案:

答案 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/