您当前位置: 主页 / Dog 博客 / 存档

Flash 和网页标准

2004 年 4 月 21 日,星期三 (格林威治标准时间 10:50 AM)

首先,我需要警告一下:我绝不是什么 Flash 专家。事实上,我尽量避开它,就像躲避瘟疫一样。

但是,你知道,有时候你不得不将 Flash 电影嵌入到 HTML 中。Macromedia 提供的这种方法被普遍认为完全不够用,因为它涉及到 `embed` 标签。真是糟糕。

但后来 Drew McLellan 想出了“Flash Satay”,这种方法只使用了 `object` 标签。太棒了。这才是它们应有的用途。但这种方法需要对 Flash 电影本身进行一些调整,因为 IE 在流式传输方面存在问题。

现在 Hixie 想出了一个有效的、非 `embed` 的方法,它依赖于 Internet Explorer 的条件注释。专有的丑陋之处。

据我所知,以下代码(摘自“Flash Satay”)应该可以工作,但使用它后,IE 就无法进行流式传输了。

<object type="application/x-shockwave-flash" data="movie.swf">
<param name="movie" value="movie.swf" />
</object>

为了解决流式传输问题,IE 需要 `classid` 和 `codebase` 属性,但这些属性会破坏其他浏览器的一切。而这正是 Hixie 的方法奏效的地方。

在我看来,在 HTML 中嵌入 Flash 的最佳方法是使用 PHP、ASP 或其他语言,为不同的浏览器提供不同的代码。

再次声明,这绝非完美。

肯定有更好的方法……

评论

评论1

当客户端没有安装 Flash 插件时,你如何显示一张图片?

你必须在客户端进行测试,使用 JavaScript 或 Flash。有没有“纯 HTML”的方法?

你知道在哪里可以找到讨论这些问题的链接吗?

ssn 于 2004 年 4 月 21 日星期三下午 12:19 GMT 说道。

评论2

我的方法不使用任何专有内容。IE 窒息在我的完美有效的注释上,因此绕过了其 `` 处理中的一个 bug,这纯属巧合(*咳嗽*)。

Ian Hickson 于 2004 年 4 月 21 日星期三下午 1:08 GMT 说道。Ian Hickson

评论3

直接使用 embed 标签。如果你为了标准而牺牲浏览器兼容性,这真的表明你不在乎制作网站,并且你是 W3C 的顺从者。

为浏览器编写,而不是为标准编写。

Dante Evans 于 2004 年 4 月 22 日星期四凌晨 1:16 GMT 说道。Dante Evans

评论4

但你可以不用 embed 标签做到这一点……这并没有牺牲任何东西。

上面提到的任何一种方法都比 Macromedia 的建议好,即使忽略标准。

为标准编写 *就是* 为浏览器编写。*所有* 浏览器。

Patrick 于 2004 年 4 月 22 日星期四上午 8:45 GMT 说道。Patrick

评论5

Hixie,你的方法是我见过的最好的,但仍然不完美。可惜你需要添加两组标签,重复 URL 等等。到目前为止,我还是会用你的方法。

我一直在尝试使用 DOM 来重写 object 标签(如果需要的话),但到目前为止我还没有取得多少成功。这样一个应该很简单的问题,却非常棘手。

Dan Webb 于 2004 年 4 月 22 日星期四上午 9:22 GMT 说道。Dan Webb

评论6

我使用了 Flash Satay,只要你使用额外的 Flash 文件(已提供)来触发流式传输,一切似乎都能正常工作。

嘿,我的看法是,有时你将一个参数输入到一个包含的 SHTML、PHP 或其他页面中,并用它来输出你想要的东西。使用一个包含的 Flash 文件真的有那么糟糕吗?这很烦人,但同一个包含的 Flash 文件可以反复使用。我从未编辑过,也从未需要编辑任何 Flash 文件来使用它。

Andrew 于 2004 年 4 月 27 日星期二下午 4:56 GMT 说道。Andrew

评论7

我使用这段代码,它在所有测试过的浏览器中都显示正常,包括 IE。

<object type="application/x-shockwave-flash" data="mymovie.swf" width="200" height="200">
<param name="movie" value="mymovie.swf" />
<!-- 非 Flash 内容放在这里 -->
</object>

Kim Siever 于 2004 年 5 月 13 日星期四下午 4:26 GMT 说道。Kim Siever

评论8

Kim,那个方法的症结在于电影不会流式传输。

Patrick 于 2004 年 5 月 13 日星期四下午 4:33 GMT 说道。Patrick

评论9

大家对使用 JavaScript 嵌入 Flash 有什么看法,就像 http://www.receiverstudio.com/ 使用的那样?

Nathan Searles 于 2004 年 5 月 13 日星期四晚上 9:02 GMT 说道。

评论10

据我所知,receiverstudio.com 的 JavaScript 首先会检查客户端浏览器是否安装了最新的 Flash 插件。此外,它还使用了 object 和 embed 标签,看起来就像是它们被生成出来一样。

Farrel Hardenberg 于 2004 年 5 月 20 日星期四下午 2:18 GMT 说道。Farrel Hardenberg

评论11

在使用这种方法时,有一个 bug 大家都应该注意。

Safari 会忽略 object 标签内的 'param' 标签,所以如果你想为插件使用任何特殊参数,比如 flashvars、wmode 或 salign,它们在 Safari 中将无法正常工作。

最好的解决方法是使用 JavaScript 来嵌入你的电影。这样你就可以进行 Flash 插件检测,这比只检查是否安装了 Flash 插件更彻底,因为你可以检查 Flash 的版本。

这是我开发的 js Flash 嵌入代码:
http://blog.deconcept.com/2004/10/14/web-standards-compliant-javascript-flash-detect-and-embed/

Geoff 于 2005 年 1 月 4 日星期二下午 4:14 GMT 说道。Geoff

评论12

我喜欢 Hixie 的想法。我看到它存在两个问题。

1. (这个问题存在于当前方法中)仍然有两个独立的实例,因此无法通过 id="" 属性来识别 Flash。我猜你可以给它们分别指定 ID,然后无论如何都同时使用它们,但这开始变得很愚蠢。

2. 只是一个小的改进。为什么不把其他类型的材料放在条件判断之外呢?如果他们使用 IE,但没有启用 Flash(这是放置那些内容的全部目的),会发生什么?如果你把你的或替代文本放在条件判断之后,比如







替代内容


这应该适用于所有平台,因为 Moz 或 Opera 应该会忽略第一个 <object> 标签,然后继续下一个。如果它被禁用,那么它会继续下一个列表项,也就是“替代内容”。至少我记得 object 标签应该是这样工作的。

Josh Walker 于 2005 年 3 月 16 日星期三晚上 8:38 GMT 说道。

评论13

有人知道如何将 Flash 嵌入 Myspace 吗?我听说他们会剥离 param,这不允许我同时嵌入一个带 Flash 的 xml 文件。有人知道吗?

Amir Meshkin 于 2005 年 10 月 30 日星期日早上 5:59 GMT 说道。Amir Meshkin

另请参阅

SiteGround: Fast, reliable, recommended hosting.