【问题标题】:find embedded objects (esp flash files) using javascript/jQuery使用 javascript/jQuery 查找嵌入对象(尤其是 flash 文件)
【发布时间】:2012-02-19 07:04:56
【问题描述】:

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

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

  2. 嵌入标签,例如:<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 object??

【问题讨论】:

  • 我曾经写了一个小书签来查找 flash,我记得这个有趣的事实:objects 可以嵌套,所以object 可能是object 的后代。当然,embeds 通常用作objects 的子代。你需要过滤掉那个。

标签: javascript flash


【解决方案1】:

这个怎么样:

jQuery:

$('object:has(embed)');

原版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/

【讨论】:

  • 感谢您的回答朋友,我知道 document.embeds ,但是对象标签呢?知道闪存是否已成功加载对我来说并不重要。我只需要拥有整个 Flash 对象。
  • 在 IE 中,object 标签有效,embed 标签被忽略。但是(我认为,我不确定)非 IE 浏览器使用嵌入标签,如果 embed 标签包含在对象标签中(就像我在问题中提到的第三种方式)。
  • 我确实需要 Flash 对象,而不是页面的对象/嵌入标签。
  • Flash 对象的 API 是通过 DOM 对象公开的,所以实际上 HTML 元素和 Flash 对象没有区别。
  • 没有办法判断 Flash 对象是否已加载,除非它提供了一个 API(回调或属性)用于该对象 (example)。如果你知道有一些 API 方法,你可以像这样在 DOM 元素中测试它们的存在:if ($('#someflash').getPlaylistIndex).
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多