【问题标题】:FlashVars w/o SWFObject doesn't work for pure AS3 projectFlashVars w/o SWFObject 不适用于纯 AS3 项目
【发布时间】:2011-09-02 09:58:32
【问题描述】:

这让我发疯了。我过去曾与 SWFObject 合作过,这很棒。但是我有一个不使用 JavaScript 的要求。因此,当我尝试在网上做 flashvars 示例时,它们似乎对我不起作用。

重复步骤:

1) 使用 Flex 或 Flash Builder 创建一个纯 AS3 项目

2) 在 index.html 中任何有 .swf 的地方,添加名称值对后缀。 test.swf?foo=bar

3) 在主类Sprite的构造函数中,trace(root.loaderInfo.parameters.foo)。

预期:条形,但跟踪为未定义

我已经尝试 setTimeout() 来评估未来 5 秒,但仍然无法正常工作,就好像它根本没有加载一样。

        <noscript>
        <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="${width}" height="${height}" id="${application}">
            <param name="movie" value="${swf}.swf?foo=bar" />
            <param name="quality" value="high" />
            <param name="bgcolor" value="${bgcolor}" />
            <param name="allowScriptAccess" value="sameDomain" />
            <param name="allowFullScreen" value="true" />
            <!--[if !IE]>-->
            <object type="application/x-shockwave-flash" data="${swf}.swf?foo=bar" width="${width}" height="${height}">
                <param name="quality" value="high" />
                <param name="bgcolor" value="${bgcolor}" />
                <param name="allowScriptAccess" value="sameDomain" />
                <param name="allowFullScreen" value="true" />
            <!--<![endif]-->
            <!--[if gte IE 6]>-->
                <p> 
                    Either scripts and active content are not permitted to run or Adobe Flash Player version
                    ${version_major}.${version_minor}.${version_revision} or greater is not installed.
                </p>
            <!--<![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>
    </noscript>   

AS3

package
{
import flash.display.LoaderInfo;
import flash.display.Sprite;

public class FlashVarsTest extends Sprite
{
    public function FlashVarsTest()
    {
        var paramsObj:Object =
            LoaderInfo(root.loaderInfo).parameters;
        trace("foo="+paramsObj["foo"]);
    }
}

}

这也不起作用:

package
{
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.events.Event;

public class FlashVarsTest extends Sprite
{
    public function FlashVarsTest()
    {

        this.addEventListener(Event.ADDED_TO_STAGE, init)
    }

    private function init(event:Event):void
    {
        var paramsObj:Object =
            LoaderInfo(root.loaderInfo).parameters;
        trace("foo="+paramsObj["foo"]);

    }
}

}

【问题讨论】:

  • 按预期工作
  • &lt;object type="application/x-shockwave-flash" data="${swf}.swf?=foobar"
  • 修复了,还是不行

标签: actionscript-3


【解决方案1】:

看到OP代码后更新

您的错误在非 IE 对象标记中:

 <object type="application/x-shockwave-flash" data="${swf}.swf?=foobar"

喜欢一个错字!


您是否尝试过使用 FlashVars 对象参数标记而不是将它们作为 URL 的一部分传递?

<object classid="blah blah">
    <param name="movie" value="test.swf" />
    <param name="FlashVars" value="foo=bar" />
    <embed src="test.swf" FlashVars="foo=bar" />
</object>

显然我在这里省略了很多额外的东西,但这应该说明变量传递是如何完成的。

附带说明一下,通过 URL 传递变量应该在 AS3 中工作,正如 Peter deHann 的这篇博客所示:http://blogs.adobe.com/pdehaan/2006/07/using_flashvars_with_actionscr.html

自我测试:

我使用 ExternalInterface 输出到 Firebug 控制台。两个输出都按预期出现,证明没有与root.loaderInfo相关的绘制延迟

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.external.ExternalInterface;

    public class Main extends Sprite
    {
        public function Main()
        {
            if(ExternalInterface.available) ExternalInterface.call("console.log",root.loaderInfo.parameters.foo);
            (stage) ? init() : addEventListener(Event.ADDED_TO_STAGE,init);
        }

        private function init(evt:Event = null):void
        {
            if(evt) removeEventListener(Event.ADDED_TO_STAGE,init);
            if(ExternalInterface.available) ExternalInterface.call("console.log",root.loaderInfo.parameters.foo);
        }
    }
}

HTML:

<!DOCTYPE html>
<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" />

        <style type="text/css" media="screen"> 
            html, body  { height:100%; }
            body { margin:0; padding:0; overflow:auto; text-align:center; 
                   background-color: #ffffff; }   
            object:focus { outline:none; }
            #flashContent { display:none; }
        </style>          

    </head>
    <body>
            <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" id="Main">
                <param name="movie" value="Main.swf?foo=bar" />
                <param name="quality" value="high" />
                <param name="bgcolor" value="#ffffff" />
                <param name="allowScriptAccess" value="sameDomain" />
                <param name="allowFullScreen" value="true" />
                <!--[if !IE]>-->
                <object type="application/x-shockwave-flash" data="Main.swf?foo=bar" width="100%" height="100%">
                    <param name="quality" value="high" />
                    <param name="bgcolor" value="#ffffff" />
                    <param name="allowScriptAccess" value="sameDomain" />
                    <param name="allowFullScreen" value="true" />
                <!--<![endif]-->
                <!--[if gte IE 6]>-->
                    <p> 
                        Either scripts and active content are not permitted to run or Adobe Flash Player version
                        10.2.0 or greater is not installed.
                    </p>
                <!--<![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>    
   </body>
</html>

【讨论】:

  • Thx shane,但它已被尝试过,但它不起作用。你能给我做一个健全性检查并按照你自己的建议创建一个纯 AS3 项目吗?我认为它不起作用。
  • 按预期工作,正如您所描述的将其添加到 swf 路径中。我担心你的代码有问题。
  • 完成,HTML 使用test.swf?foo=bar。我原始答案中的技术产生了相同的预期结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 2011-03-06
  • 2018-10-15
  • 2011-08-10
  • 2011-12-24
相关资源
最近更新 更多