题
通常,Flash 和 Flex 应用程序使用以下组合嵌入到 HTML 中: object
和 embed
标签,或更常见的是使用 JavaScript。但是,如果您直接链接到 SWF 文件,它将在浏览器窗口中打开,并且无需查看地址栏,您就无法判断它没有嵌入到尺寸设置为 100% 宽度和高度的 HTML 中。
考虑到嵌入填充 100% 浏览器窗口的 Flash 或 Flex 应用程序所需的 HTML、CSS 和 JavaScript 的开销,直接链接到 SWF 文件有哪些缺点?有什么好处?
我可以想到一个优点和三个缺点:你不需要 100 多行 HTML、JavaScript 和 CSS,但你没有插件检测,没有版本检查,并且你失去了最好的 SEO 选项(渐进增强)。
更新 不要纠结于这 100 多行,我只是说嵌入 SWF 所需的代码量相当多(我的意思是包括像 SWFObject 这样的库),而且它只是为了显示 SWF,这可以通过直接链接到它,无需一行即可完成。
解决方案
直接链接到 SWF 文件的优点:
- 访问速度更快
- 在您点击链接之前您就知道这是一部 Flash 电影
- 跳过 html 和 js 文件(无论如何你都不会使用 CSS 来显示 100% flash 电影)
缺点:
- 您对电影默认设置几乎没有控制权。
- 您不能使用自定义背景颜色、透明度等。
- 您不能使用 flashVars 将数据从 HTML 发送到电影
- 无法使用 fscommand 从电影到页面
- 电影比例永远不会与用户窗口的纵横比相同
- 您无法弥补浏览器的不竞争力(下一个新浏览器出现,您就有麻烦了)
- 没有搜索引擎优化
- 没有页面标题,如果您希望人们正确添加书签,那就不好了。
- 没有插件信息、下载链接等。
- 如果您的 SWF 连接到外部数据源,则可能会遇到跨域问题。
- 重命名 SWF 文件也会重命名链接。不利于版本控制。
简而言之,对于复杂的应用程序 - 始终使用 HTML。对于简单的动画电影,您可以选择任何一种方式。
其他提示
您还会失去对 SWF 的外部控制。当它嵌入到 HTML 中时,您可以使用 javascript 与 SWF 进行通信。如果直接加载 SWF,则可能无法实现。
你的 100 多行报价对我来说似乎相当高。FlashDevelop 生成的用于嵌入 SWF 的 HTML 仅大约 35 行,其中包含一个 swfobject.js 文件。您不需要接触 js 文件,最多只需以非常小的方式调整 HTML 即可使其执行您想要的操作。
根据我的经验,并非所有浏览器都能正确处理此问题。我不太确定为什么(或哪些浏览器),但我有时会错误地向客户发送这样的链接,而他们回来时常常感到困惑。我怀疑他们的浏览器提示他们下载文件而不是正确显示文件。
我能想到的一个好处是能够在 SWF 的直接 URL 中指定 GET 参数,然后该参数将在 Flash 应用程序中可用(通过 Application.application.parameters
在 Flex 中,不确定如何在 Flash CS3 中访问它们)。如果您有 HTML 包装器,当然也可以通过其他方式来实现,但这样工作量会更少。
为什么需要 100 多行代码?使用类似的东西 swf对象 减少了相当多的数量(通常你不想进行插件检测等。无论如何用手)。
更多优点:
- 重量轻,因为您可以摆脱标题和似乎堆积在那里的所有工具栏,甚至不需要滚动条。当您试图在短时间内展示大量动作时,这会增强效果。
- 最重要的是:您可以将其放在一个窗口中,您可以将其放大或缩小,并使电影变大或变小。播放器将调整影片的大小以填充您的窗口。这对于像集体照片这样的事情非常有用,每个人都想放大以找到自己和他们的朋友。我已经为一帧 Flash 制作完成了这个!
缺点:与一般的弹出窗口一样,如果您从同一站点请求多个弹出窗口,并且需要不同大小的弹出窗口,则浏览器往往会简单地覆盖您在 window.open 中请求的大小并重用任何内容。您需要关闭所有打开的弹出窗口,以便 window.open 进行全新创建。它变得很复杂,而且我无法让它在网站中跨页面工作。谁成功完成此操作,请发布如何操作!
Adobe 应该为自己的标准嵌入感到羞耻,这违背了约定优于配置的目的。检查 ^swfobject (如上所述)或 swfin