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

Javascript 什么';将Flash(swf)文件嵌入HTML(和XHTML)文档的最终方法是什么?,javascript,flash,swfobject,Javascript,Flash,Swfobject,和大多数人一样,我使用SWFObject将Flash(swf)文件嵌入到我的Web项目中 如您所知:静态发布和动态发布 静态发布使用常规标记将文件嵌入到文档中,并使用JavaScript进行检查,而单用常规标记无法进行检查。这就像您的客户无法打开JavaScript一样好(搜索引擎、一些便携式设备……),文件仍然会显示(如果他们安装了正确的Flash插件)。但是,如果您有人使用传统/未打补丁的Internet Explorer(),他们将有可怕的“点击激活”与Flash交互 动态发布使用Java

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

如您所知:静态发布和动态发布

静态发布使用常规标记将文件嵌入到文档中,并使用JavaScript进行检查,而单用常规标记无法进行检查。这就像您的客户无法打开JavaScript一样好(搜索引擎、一些便携式设备……),文件仍然会显示(如果他们安装了正确的Flash插件)。但是,如果您有人使用传统/未打补丁的Internet Explorer(),他们将有可怕的“点击激活”与Flash交互

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

这两种方法都有其优点和不便之处。在一个乌托邦式的世界里,我们都会使用动态发布方法,但我们(或至少像我这样的一些人)被使用IE 6的非常旧的系统的客户困住了(他们想升级,但他们不能,因为设计糟糕的软件升级成本高达10万美元以上)。我需要支持遗留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>

SWFObject 2静态+动态发布示例页面
嵌入swf(“test.swf”、“myContent”、“300”、“120”、“9.0.0”、“expressInstall.swf”);
替代内容

我向一个集成人员展示了这一点,他告诉我应该使用
标记

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

  • 将在JavaScript关闭的情况下工作(嵌入备用内容中的Flash)
  • 将通过W3C验证程序
  • 将删除旧版/未修补IE上的“点击激活”
  • 将使用SWFObject的闪存检测/自动安装
编辑:增加了赏金。拜托,我不想看到像“现在没人关闭JavaScript”或“如果JavaScript关闭,Flash很可能也会关闭”这样的答案


编辑2:我想要的答案是静态嵌入Flash的最佳方式(使用常规HTML标记)。在此基础上,我将添加动态发布。自IE 6以来,它将在所有主要浏览器中运行,并且将通过W3C验证



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

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

有没有办法让您的客户端在传统浏览器的旁边安装另一个浏览器(如Firefox),并对传统应用程序使用IE6,对您的应用程序使用FF?


<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>
var flashVars={}; var params={}; params.allowScriptAccess=“始终”; params.allowFullScreen=false; params.bgcolor=“#1a1a1a”; params.wmode=“不透明”; var atts={}; atts.id=“我的swf”; swfobject.embeddeswf(“my.swf”、“my.swfobject”、“100%”、“100%””、“10.1.0”、“playerProductInstall.swf”、flashVars、params、atts);

如果这是你要找的,请告诉我。如果需要,我可以详细说明。你也可以考虑建议你的IE6奴隶安装谷歌浏览器框架:

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

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

<!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安装程序,也没有替换程序。

这是:

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

swfobject.embeddeswf('test.swf','myFlash','320','240','9.0.0','/swfobject/expressInstall.swf',0,0,0);
版本

  • 我结合了
  • 静态部分使用

是的,但动态发布Flash内容的AFAIK不会被(至少有些)搜索引擎编入索引。在我的例子中,我有一些客户坚持使用旧的IE。其他一些客户则不然,我希望从所有方面中获益(即使这对我来说意味着更多的工作)。是的,当我在旧的Firefox配置文件中使用NoScript时,我确实希望Flash运行。我不想要的是恼人的广告和糟糕的Flash使用。静态发布使用,而不是静态发布使用。动态发布使用,而不是动态发布将用于保持时态。已修复!我正在尽我最大的努力,因为英语不是我的主要语言:)正在使用
/
将这两种方法都包含在正确的行中?如果需要,是的,但我看不到它的用途,因为你用常规标记静态嵌入Flash,并在脚本上添加功能。noscript将是无用的,因为即使没有脚本,Flash也已经存在了(如果您有plug i)