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 或其他语言,为不同的浏览器提供不同的代码。
再次声明,这绝非完美。
肯定有更好的方法……
评论
评论2
我的方法不使用任何专有内容。IE 窒息在我的完美有效的注释上,因此绕过了其 `
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
评论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
另请参阅
- 下一页: Zeldman 的过渡性重新设计
- 上一页: Top Dog Top 10

评论1
当客户端没有安装 Flash 插件时,你如何显示一张图片?
你必须在客户端进行测试,使用 JavaScript 或 Flash。有没有“纯 HTML”的方法?
你知道在哪里可以找到讨论这些问题的链接吗?
ssn 于 2004 年 4 月 21 日星期三下午 12:19 GMT 说道。