0

我正在尝试使用 swfobject 和一些 cookie 代码来制作一个非常简约的无边界视频示例,以检查网站访问者是否曾经去过那里。后面的 cookie 代码有效,但基本的 SWFObject 2.2 代码无效。

我的问题是 code.google 的 SWFObject 2.2 库没有按预期工作;具体来说,它不遵守 params.play='false' 并且每次都会自动播放 SWF,无论我如何设置此属性(它不服从)。 我从给定域中读取了一个 cookie,如果将其设置为“autostart_video=false”,然后我将字符串“false”传递给该 SWFObject 播放参数,目的是使其在刷新时不会自动启动视频。cookie 检查代码,但 @#$%#$@$ swf 代码没有。在下面最简单的示例中,我完全排除了 cookie 代码,只测试 SWFobject 代码本身。

下面代码示例中的属性使用静态发布,但动态发布方法也不起作用(两种方法都尝试过)。我开始认为示例 SWF 文件本身有问题,但使用其他 swf 对其进行了测试,它们都有这种行为。

下面的代码是使用 google 发布的“SWFObject 2 HTML and JavaScript generator v1.2”生成的。

我试图反转 swfobject 库,坦率地说,代码被混淆了或者远远超出了我,所以找不到它在哪里设置参数和/或自动加载更多库,否则我不会寻求帮助。

无论如何,请帮忙!

<!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></title>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <script type="text/javascript" src="swfobject/swfobject.js"></script> <!--path is correct-->
                <script type="text/javascript">
                    swfobject.registerObject("myFlashContent", "9.0.0");
                </script>
            </head>
            <body>
                <div>
                    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="400" height="600" id="myFlashContent" align="middle">
                        <param name="movie" value="swfObject2.2-is-retarded.swf" />
                        <param name="play" value="false" />
                        <param name="loop" value="false" />
                        <param name="menu" value="false" />
                        <param name="quality" value="autohigh" />
                        <param name="scale" value="noscale" />
                        <param name="wmode" value="transparent" />
                        <!--[if !IE]>-->
                        <object type="application/x-shockwave-flash" data="dwfObject2.2-is-retarded.swf" width="400" height="600" align="middle">
                            <param name="play" value="false" />
                            <param name="loop" value="false" />
                            <param name="menu" value="false" />
                            <param name="quality" value="autohigh" />
                            <param name="scale" value="noscale" />
                            <param name="wmode" value="transparent" />
                        <!--<![endif]-->
                            <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>
                        <!--[if !IE]>-->
                        </object>
                        <!--<![endif]-->
                    </object>
                </div>
            </body>
        </html>
4

1 回答 1

1

<param name="play" value="false" />并非旨在阻止视频播放,仅用于阻止 SWF。

大多数视频播放器 SWF 不是基于时间轴的,而是基于ActionScript。这意味着它们几乎是 100% AS,这通常意味着它们只包含一两个帧。如果项目中只有一个帧,并且项目依赖于 ActionScript 来执行操作,则在第一帧停止 SWF 将产生零效果......第一帧上的 ActionScript 仍将执行。反过来,链接的视频仍将被加载并播放。

所以你需要做的是确定你的播放器 SWF 是否有一个内部变量,你可以设置它来防止自动播放。然后,这需要使用FlashVars参数而不是“自动播放”参数与 SWF 进行通信——该参数只是告诉 Flash Player 在加载时不要让 SWF 超过第一帧。它不会阻止 ActionScript 的执行,并且完全独立于视频控制器。

例如,如果您的视频播放器 SWF 使用名为“autostart”的内部变量,并且它接受一个布尔值作为参数,您可以将其写为:

<param name="flashvars" value="autostart=false" />

查看您的视频播放器 SWF 的文档,了解您可以使用哪些 flashvar。

于 2009-12-11T07:23:38.277 回答