Как передать переменную PHP как FlashVars через SWFObject

Я пытаюсь взять переменную PHP и передать ее Flash через переменные Flash. Моя конечная цель - передать строку, отформатированную как XML, во Flash, но из-за того, что я борюсь, я сократил все до основ. Я просто пытаюсь передать простую строковую переменную PHP в Flash через FlashVars с SWFObject, но что-то не так. Страница не загружается, когда я пытаюсь передать переменную внутри тегов php, но она загрузится, если я просто передам жестко закодированную строку. Основная структура моей страницы состоит в том, что у меня вверху объявлен некоторый PHP, например:

PHP

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

Некоторый HTML (исключен здесь для простоты), а затем JavaScript SWFObject Встроить в мой 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>

И самое необходимое из кода ActionScript 3:

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

Как передать переменную PHP с помощью SWFObject и FlashVars?

Спасибо.


person Matty B    schedule 24.05.2010    source источник


Ответы (2)


Ух, мне нужно было убежать от Flash vars, и это сработало.

Для всех, кому интересно, это то, что мне нужно было изменить

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

К этому:

flashvars.theXML = escape('<?php print $test ?>');
person Matty B    schedule 24.05.2010

escape () не является надежным способом избежать (!)

Вместо этого используйте encodeURIComponent ().

Это из пункта 9 в FAQ: http://code.google.com/p/swfobject/wiki/faq

  1. Как я могу передать URI или HTML-код в качестве значения с помощью flashvars?

Специальные символы и символы = и & нельзя напрямую использовать внутри значений flashvars (последнее, потому что они используются для складывания самих flashvars).

Вы можете обойти эту проблему, экранируя эти символы перед передачей их в качестве значений flashvar. Пример:

encodeURIComponent ("& trade") станет% 26trade

Значения будут доступны в вашем swf-файле уже в незашифрованном виде, поэтому в вашем swf-файле нет необходимости в деэкранировании.

Обратите внимание, что encodeURIComponent доступен не во всех браузерах, но доступен во всех распространенных современных версиях. Если вам нужна полная обратная совместимость, вы можете вместо этого использовать escape (), но обратите внимание, что escape () не работает с двухбайтовыми символами (например, китайскими).

Вы также можете экранировать эти символы вручную, используя:

* %3D instead of =
* %26 instead of &
person Jonny    schedule 01.06.2010