将Flash(swf)文件嵌入HTML(和XHTML)文档的最终方法是什么?

时间:2010-07-07 13:13:02

标签: javascript flash swfobject

与大多数人一样,我使用SWFObject将Flash(swf)文件嵌入到我的Web项目中。

如您所知SWFObject offers 2 ways to embed Flash:静态发布和动态发布。

静态发布使用常规标记将文件嵌入到文档中,并使用仅使用常规标记无法进行的JavaScript检查。这很好,好像你有无法打开JavaScript的客户(搜索引擎,一些便携式设备......),文件仍会显示(如果他们安装了正确的Flash插件)。但是如果你有遗留/未修补的Internet Explorer(between April 2006 and April 2008)上的人,他们将有可怕的“点击激活”与Flash进行交互。

动态发布使用JavaScript嵌入Flash。这将摆脱旧IE上的“点击激活”功能,但如果JavaScript关闭,Flash将根本不存在。

这两种方法都有其优点和不便之处。在一个乌托邦世界中,我们都会使用动态发布方法,但是我们(或者至少我们中的一些人)喜欢使用IE 6的旧系统(他们想要升级,但他们不能因为非常糟糕)设计软件,升级费用为10K + $)。我需要支持旧版IE,并希望摆脱“点击激活”功能,同时支持关闭JavaScript的人。

如何合并静态动态发布方法?怎么样:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <title>SWFObject 2 static+dynamic publishing example page</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <script type="text/javascript" src="swfobject.js"></script>
        <script type="text/javascript">
        swfobject.embedSWF("test.swf", "myContent", "300", "120", "9.0.0", "expressInstall.swf");
        </script>
    </head>
    <body>
        <div id="myContent">
            <object id="myId" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="300" height="120">
                <param name="movie" value="test.swf" />
                <!--[if !IE]>-->
                <object type="application/x-shockwave-flash" data="test.swf" width="300" height="120">
                <!--<![endif]-->
                <div>
                    <h1>Alternative content</h1>
                    <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>
                </div>
                <!--[if !IE]>-->
                </object>
                <!--<![endif]-->
            </object>
        </div>
    </body>
</html>

我向集成商展示了他,他告诉我应该使用<object><embed>代码......

将Flash嵌入Web项目的最终方式是什么?解决方案:

  • 将关闭JavaScript(嵌入在备用内容中的Flash)
  • 将通过W3C验证器
  • 将删除旧版/未修补IE上的“单击以激活”
  • 将使用SWFObject的Flash检测/自动安装

编辑:添加了赏金。请,我不希望看到“不要打扰现在没有人关闭JavaScript”或“如果javascript关闭,很可能Flash也会关闭”等答案。


编辑2:我正在寻找的答案是静态嵌入Flash的最佳方式(使用常规HTML标记)。在此之后,我将添加动态发布。自IE 6以来可以在所有主要浏览器中使用的like this,它将通过W3C验证。


7 个答案:

答案 0 :(得分:4)

<head>
    <script src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script> 
    <script>
    var flashVars = {};
    var params = {};
        params.allowScriptAccess = "always";
        params.allowFullScreen = false;
        params.bgcolor = "#1a1a1a";
        params.wmode = "opaque";

        var atts = {};
        atts.id = "my-swf";

    swfobject.embedSWF("my.swf", "my-swfobject", "100%", "100%", "10.1.0", "playerProductInstall.swf", flashVars, params, atts);
    </script>
</head>
<body>
    <div id="my-swfobject">
        <!-- Any <object></object>, <embed></embed>, and everything else here will be rendered for users without JavaScript. If JavaScript is on, SWFObject will destroy div#my-swfobject and replace it with object#my-swf. -->
    </div>
</body>

如果您正在寻找,请告诉我。如果需要,我可以详细说明。您可能还会考虑建议您的IE6从属设备安装Google Chrome浏览器内嵌框架:http://code.google.com/chrome/chromeframe/

答案 1 :(得分:2)

这是:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
    <head>
        <title></title>
        <script type="text/javascript" src="swfobject.js"> </script>
        <script type="text/javascript">
            swfobject.embedSWF('test.swf', 'myFlash', '320', '240', '9.0.0', '/swfobject/expressInstall.swf', 0, 0, 0);
        </script>
    </head>
    <body>
        <div>
            <object id="myFlash" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="320" height="240">
                <param name="movie" value="test.swf">
                <!--[if !IE]>-->
                <object type="application/x-shockwave-flash" data="test.swf" width="320" height="240">
                <!--<![endif]-->
                    <p>Version ???</p>
                <!--[if !IE]>-->
                </object>
                <!--<![endif]-->
            </object>
        </div>
    </body>
</html>

答案 2 :(得分:1)

我过去所做的是静态地将我的flash内容放在div中(使用object和embed标签),然后让SWFObject在加载时覆盖该div的内容。这将与您想要做的一样接近。

答案 3 :(得分:0)

使用动态发布。如果用户关闭了javascript,请放弃。他们也不希望Flash运行。

答案 4 :(得分:0)

有没有办法让你的客户安装另一个浏览器(如Firefox)和他们的旧浏览器,并使用IE6作为遗留应用程序和FF为你的?

答案 5 :(得分:0)

我会从YouTube等允许嵌入Flash的网站中获取提示。不确定这是否适用于非“电影”类型。

来自YouTube:

<object width="[width]" height="[height]">
<param name="movie" value="[Path to SWF]"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="[Path to SWF]" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="[width]" height="[height]"></embed>
</object>

答案 6 :(得分:0)

我看到的唯一方法是做这样的事情:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title>test</title>
</head>
<body>
    <p>
        <object width="160" height="112" data="movie.swf" type="application/x-shockwave-flash">
            <param name="movie" value="movie.swf" />
        </object>
    </p>
</body>
</html>

我认为没有更好的选择。这将适用于IE,Mozilla和Webkit浏览器,并且xhtml有效。但没有闪存安装程序,也没有替换。