2010-05-24 5 views
1

J'essaie de prendre une variable PHP et de la transmettre à Flash via Flash vars. Mon but final est de passer une chaîne formatée en XML à Flash, mais parce que je me bats, j'ai tout réduit à l'essentiel. J'essaye juste de passer une simple variable de chaîne PHP à Flash via FlashVars avec SWFObject mais quelque chose ne va pas. La page ne se chargera pas lorsque j'essaierai de transmettre la variable à l'intérieur des balises php, mais elle se chargera si je ne fais que passer une chaîne codée en dur. La structure de base de ma page est que je l'ai un peu de PHP déclaré en haut comme ceci:Comment passer une variable PHP en FlashVars via SWFObject

PHP

<?php 
    $test = "WTF"; 
?> 

Certains HTML (exclus ici par souci de simplicité) et le JavaScript SWFObject Intégrer dans mon HTML:

<script type="text/javascript" src="js/swfobject2.js"></script> 
    <script type="text/javascript"> 
     // <![CDATA[ 
     var swfURL = "swfs/Init-Flash-PHP.swf"; 

     var flashvars = {}; 
      flashvars.theXML = <?php print $test ?>; 

     var params = {}; 
      //params.menu = "false"; 
      params.scale = "showAll"; 
      params.bgcolor = "#000000"; 
      params.salign = "TL"; 
      //params.wmode = "transparent"; 
      params.allowFullScreen = "true"; 
      params.allowScriptAccess = "always"; 

     var attributes = {}; 
      attributes.id = "container"; 
      attributes.name = "container"; 


     swfobject.embedSWF(swfURL, "container", '100%', '100%', "9.0.246", "elements/swfs/expressinstall.swf", flashvars, params, attributes); 


     // ]]> 
</script> 

Et l'essentiel du code ActionScript 3 code:

_paramObj = LoaderInfo(stage.loaderInfo).parameters; 
theText_txt.text = _paramObj['theXML']; 

Comment transmettre une variable PHP en utilisant SWFObject et FlashVars?

Merci.

Répondre

3

Euh, j'avais besoin d'échapper aux vars Flash et ça a marché.

Pour toute personne qui se intéresse, c'est ce que je devais changer

flashvars.theXML = <?php print $test ?>; 

à ceci: (!)

flashvars.theXML = escape('<?php print $test ?>'); 
1

escape() n'est pas un moyen infaillible pour échapper

Utilisez encodeURIComponent() à la place.

Ceci est du point 9 à la FAQ: http://code.google.com/p/swfobject/wiki/faq

  1. Comment puis-je passer URIs ou code HTML comme valeur à l'aide flashvars?

caractères spéciaux et les symboles = et & ne peuvent pas être directement utilisées à l'intérieur valeurs FlashVars (la dernière parce ils sont utilisés pour empiler les flashvars eux-mêmes).

Vous pouvez contourner ce problème par en échappant ces caractères avant en leur transmettant des valeurs flashvar. Un exemple:

encodeURIComponent ("commerce &") sera devenir% 26trade

Les valeurs seront disponibles dans votre swf déjà unencoded, donc pas déséchapper est nécessaire dans votre swf.

Notez que encodeURIComponent n'est pas disponible dans tous les navigateurs, mais est disponible dans toutes les versions modernes communes.Si vous avez besoin d'une compatibilité complète à l'envers, vous pouvez utiliser escape() à la place, mais notez que escape() ne fonctionne pas bien avec les caractères codés sur deux octets (comme le chinois).

Vous pouvez également échapper à ces caractères manuellement en utilisant:

* %3D instead of = 
* %26 instead of & 
Questions connexes