2011-09-02 24 views
0

这一直使我疯狂。我曾经在SWFObject上工作过,这很棒。不过,我有一个要求不使用JavaScript。所以当我试图在网上做flashvars的例子时,他们似乎不适合我。没有SWFObject的FlashVars对于纯AS3项目不起作用

步骤重复:

1)创建使用Flex或Flash Builder中

2)在index.html的纯AS3项目,只要有一个.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"]); 

    } 
} 

}

+1

按预期工作对我来说 – hooleyhoop

+0

我们能看到你的AS3代码? – Taurayi

+0

' shanethehat

回答

1

看到OP码之后更新

你的错误是在非IE对象标记:

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

爱是爱一个错字!


您是否尝试过使用FlashVars对象的param标记而不是将它们作为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工作,因为这个博客由彼得deHann说明:http://blogs.adobe.com/pdehaan/2006/07/using_flashvars_with_actionscr.html

测试自己:

我用ExternalInterface的输出到萤火虫安慰。两路输出达到理想的效果,证明有没有画与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> 
+0

Thx shane,但它已经尝试过,它不起作用。你可以做我的健康检查,并根据你自己的建议创建一个纯粹的AS3项目。 –

+0

按照预期的方式工作,就像你所描述的那样将它添加到swf路径中,我担心你的代码有问题 – shanethehat

+0

你介意粘贴你创建的.as3类,plz?Thx –