Pergunta

Olá a todos, hoje estou tentando obter um link para um arquivo XML passado do código Object Embed para meu filme Flash.(Não usando SWFobject).Eu tenho um arquivo swf que deve ser capaz de se conectar a três arquivos XML diferentes.

Tentativa 1


Abaixo está o código HTML (estou tentando obter o caminho XML):

<div class="left">
<h2>300 x 353 Green Accent Color</h2>

<script type="text/javascript">
        AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0','width','300','height','353','src','TEN','quality','high','pluginspage','http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash','movie','TEN' ); //end AC code
</script><noscript>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="300" height="353">
  <param name="movie" value="player.swf" />
  <param name="quality" value="high" />
  <param name="XML" value="client_user.xml" />
  <embed src="T.swf" allowscriptaccess="always" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="300" height="353"></embed>
</object></noscript>

</div>


Classe de documento

private var theXML:String = root.loaderInfo.parameters.xmlPath;


public function TEN():void
{
    if (stage) init();
    else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void 
{
    removeEventListener(Event.ADDED_TO_STAGE, init);

    xmlLoader.addEventListener(Event.COMPLETE, xmlCompleteHandler);
    xmlLoader.load(new URLRequest(root.loaderInfo.parameters.xmlPath));

    loader = new BulkLoader("bulky");
    loader.logLevel = BulkLoader.LOG_INFO;
    loader.addEventListener(BulkLoader.COMPLETE, onBulkLoadComplete);
    loader.addEventListener(BulkLoader.PROGRESS, onBulkLoadProgress);
    //loader.add("client.xml",{id:"xmldata"});              //<- for TESTING
    //loader.add(theXML+".xml",{id:"xmldata"}); //<- for LIVE
    loader.add(xmlPath+".xml",{id:"xmldata"}); //<- for LIVE
    loader.start();
}



Tentativa 2


HTML com sintaxe de passagem PARAM diferente:

<div class="right">
        <h2>520 x 477 Blue Accent Color</h2>
        <script type="text/javascript">
AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0','width','300','height','353','src','TEN','quality','high','pluginspage','http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash','movie','TEN' ); //end AC code
</script><noscript>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="300" height="353">
  <param name="movie" value="T.swf?xmlPath=0" />
  <param name="quality" value="high" />
  <param name="xmlPath" value="520.xml" />
  <embed src="T.swf" allowscriptaccess="always" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="300" height="353"></embed>
</object></noscript>
    </div>



Tentativa 3


Código Flash atualizado:

private var theXML:String = "";

private function init(e:Event = null):void 
{
    removeEventListener(Event.ADDED_TO_STAGE, init);

    theXML = stage.loaderInfo.parameters.xmlPath;

    loader = new BulkLoader("bulky");
    loader.logLevel = BulkLoader.LOG_INFO;
    loader.addEventListener(BulkLoader.COMPLETE, onBulkLoadComplete);
    loader.addEventListener(BulkLoader.PROGRESS, onBulkLoadProgress);
    //loader.add("client_user.xml",{id:"xmldata"}); //<- for TESTING
    loader.add(theXML,{id:"xmldata"}); //<- for LIVE
    //loader.add(theXML+".xml",{id:"xmldata"}); //<- for LIVE
    loader.start();
}

Código HTML atualizado:

<div class="right">
        <h2>520 x 477 Blue Accent Color</h2>
        <script type="text/javascript">
AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0','width','300','height','353','src','TEN','quality','high','pluginspage','http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash','movie','T' ); //end AC code
</script><noscript>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="300" height="353">
  <param name="movie" value="T.swf?xmlPath=0.xml" />
  <param name="quality" value="high" />
  <param name="xmlPath" value="520.xml" />
  <embed src="T.swf?xmlPath=520.xml" allowscriptaccess="always" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="300" height="353"></embed>
</object></noscript>
    </div>

No momento não está carregando o arquivo XML do parâmetro :(

Foi útil?

Solução

Olhe para FlashVars--esta é a forma padrão de passar variáveis ​​através das tags de objeto para o SWF.

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="300" height="353">
  <param name="movie" value="http://www.howdini.com/TEN/TEN.swf" />
  <param name="quality" value="high" />
  <param name="flashVars" value="theXML=client_user.xml" />
  <embed src="TEN.swf" 
         flashVars="theXML=client_user.xml"
         allowscriptaccess="always" 
         quality="high" 
         pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" 
         type="application/x-shockwave-flash" width="300" height="353">
  </embed>
</object>

Usando FlashVars dessa forma ou definindo parâmetros de consulta na URL do SWF (TEN.SWF?theXML=client_user.xml), preencherá seu loaderInfo.parâmetros campo.


Estou acostumado com o Flex (onde os FlashVars são armazenados em application.parameters, mas no AS3, acho que você usaria o loaderInfo:

// constructor
public function init():void {
    theXML = this.loaderInfo.parameters.theXML;
    ...
}

Outras dicas

Sim, basta usar o Swfobject! Em html

<script>
swfobject.embedSWF("your-movie.swf", "yourdivid", "width", "height", "flashverion", "path to expressIntall.swf", {flashvar:"value", flashvar2:"value"}, {flashparam:"value", flashparam2:"value"});
</script>
<div id="yourdivid">Your alternative content or download links for flash player</div>

No flash

var var1:Type = root.loaderInfo.parameters['flashvar'];
var var2:Type = root.loaderInfo.parameters['flashvar2'];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top