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

guz6ccqo  于 2022-11-20  发布在  Java
关注(0)|答案(7)|浏览(128)

像大多数人一样,我使用SWFObject将Flash(swf)文件嵌入到我的Web项目中。
如您所知SWFObject offers 2 ways to embed Flash:静态发布和动态发布。

静态发布使用常规标记将文件嵌入到文档中,并使用JavaScript执行常规标记无法单独执行的检查。(搜索引擎、一些便携式设备...),文件仍会显示(如果他们安装了正确的Flash插件)。但如果您的用户使用旧版/未打补丁的Internet Explorer(between April 2006 and April 2008)他们将有可怕的“点击激活”与Flash交互。
动态发布使用JavaScript嵌入Flash。这将摆脱旧IE上的“单击激活”功能,但如果JavaScript关闭,Flash将根本不存在。

这两种方法各有其优点和不便之处,在乌托邦世界中,我们都将使用动态发布方法,但是我们(或者至少我们中的一些人像我一样)与客户使用非常旧的系统与IE 6(他们想升级,但他们不能,因为设计糟糕的软件,将花费10 K +$升级)。我需要支持传统的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标记)。除此之外,我将添加动态发布。like this将在所有自IE 6以来的主流浏览器中工作,并将通过W3C验证。
b1zrtrql

b1zrtrql1#

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

w6lpcovy

w6lpcovy2#

这就是:

<!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>
kiz8lqtg

kiz8lqtg3#

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

bxfogqkk

bxfogqkk4#

使用动态发布。如果用户关闭了javascript,就给予吧。他们也不希望Flash运行。

yduiuuwa

yduiuuwa5#

有没有办法让你的客户端在安装传统浏览器的同时安装另一个浏览器(比如Firefox),并在传统应用程序中使用IE6,在你的应用程序中使用FF?

bpsygsoo

bpsygsoo6#

我会从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>
shstlldc

shstlldc7#

我认为唯一的办法就是这样做:

<!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有效的。但是没有Flash安装程序,也没有替代品。

相关问题