2011-09-02 56 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 –