Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   AS3 передача параметров через XML и html (http://www.flasher.ru/forum/showthread.php?t=142156)

BonKatty 14.07.2010 12:31

AS3 передача параметров через XML и html
 
Доброго времени суток.
Возникла следующая задача:
есть флеш с приёмом параметров из XML, нужно их принимать их из html. Код на AS3.
При чём в XML не только путь к файлу , но и тип файла (swf, flv,img,gif) и соответственные классы на них, последовательность проигрывания сцен и т д . Могу ли я передать весь XML в html и как?Ну и вообще кто-то сталкивался с подобным? Спасибо.

Хемуль 14.07.2010 12:32

2 BonKatty:
Вы о том, чтобы запихнуть XML во FlashVars? Можно так...
А можно передать из JavaScript через ExternalInterface.

BonKatty 14.07.2010 12:42

Хм.. Хемуль Киев или Житомир?
Мне нужно во FlashVars!

Хемуль 14.07.2010 12:46

2 BonKatty:
Ну так передавайте через FlashVars.
Столкнулись с какими-то проблемами? С какими? Как передавали? Какой код во флешке обрабатывал полученное?

BonKatty 14.07.2010 13:01

ok.
Есть ли способ передать не только путь загружаемого файла через FlashVars но и другие параметры типа : последовательности, типа файла и тому подобное. Как?

Хемуль 14.07.2010 13:06

2 BonKatty:
Я вас не понимаю...
Что должна принимать ваша флешка?
Через FlashVars можно передать флешке одновременно кучу переменных.

BonKatty 14.07.2010 13:12

Что же тут не понятного , если можно, то как?
часть XML :
Код:

<item>
                <type>image</type>
                <delay>3</delay>
                <path>background/02.jpg</path>
                <resize>scale</resize>
                <verticalalign>center</verticalalign>
                <horizontalalign>center</horizontalalign>       
                <alpha>1</alpha>
                <effectpattern>none</effectpattern>                                                               
                <effectalpha></effectalpha>               
                <smoothing>1</smoothing>       
</item>


Хемуль 14.07.2010 13:20

2 BonKatty:
XML - это текст. Передайте текст XML'я как строковое значение FlashVars-переменной.
Так делается, к примеру во FusionCharts. Вот, взгляните на код страницы: http://www.fusioncharts.com/Demos/Blueprint/

d_ruha 14.07.2010 13:27

почему бы не передать через flashvars флешке ссылку на лежащий рядом xml, который дальше флешка уже и будет разбирать как вам заблагорассудится?

BonKatty 14.07.2010 14:20

Цитата:

Сообщение от d_ruha (Сообщение 922197)
почему бы не передать через flashvars флешке ссылку на лежащий рядом xml, который дальше флешка уже и будет разбирать как вам заблагорассудится?

ну потомучто параметрі нужно генерировать с php.

Хемуль 14.07.2010 14:24

Цитата:

Сообщение от BonKatty (Сообщение 922218)
ну потомучто параметрі нужно генерировать с php.

Можно генерировать XML с помощью PHP. В чём проблема? Просто в качестве пути к XML-файлу задавайте путь к PHP-скрипту, который будет отдавать вам ваш XML.

Сайлас 14.07.2010 14:25

Ну эскейпите в пхп $xml для яваскрипта кавычки, затем (для не совсем старых браузеров)
Код:

flashvars.xml = encodeURIComponent('$xml');
А во флеше
Код AS3:

var xml:XML = new XML(root.loaderInfo.parameters.xml);

Ну если нужна поддержка и браузеров до ИЕ6 (неужели они есть у кого-то?), тогда урлэнкоуд и айконв вам в помощь.

BonKatty 14.07.2010 14:28

Хемуль
да хороший вариант, но меня интересует с FlashVars Как структуру XML туда затолкнуть?

Сайлас 14.07.2010 14:33

А я что-то не понял, чем мой ответ не устраивает?

Хемуль 14.07.2010 14:33

2 BonKatty:
Ну капец... Вы определитесь ТОЧНО, что КОНКРЕТНО вам нужно. Если вам нужно загружать XML-структуру, сгенерированную PHP-скриптом динамически, то делать это следует так, как уже вам написали. URLLoader'ом загружаете XML-текст как результат работы PHP-скрипта и парсите его стандартным классом XML.

Передавать через FlashVars тоже можно, хоть это и некрасиво. Про это я вам уже рассказал и показал на примере FusionCharts.

BonKatty 14.07.2010 14:39

Цитата:

Сообщение от Сайлас (Сообщение 922233)
А я что-то не понял, чем мой ответ не устраивает?

Ну не обновила я страничку.. спасибо.

Добавлено через 1 минуту
Цитата:

Сообщение от Хемуль (Сообщение 922234)
2 BonKatty:
Ну капец... Вы определитесь ТОЧНО, что КОНКРЕТНО вам нужно. Если вам нужно загружать XML-структуру, сгенерированную PHP-скриптом динамически, то делать это следует так, как уже вам написали. URLLoader'ом загружаете XML-текст как результат работы PHP-скрипта и парсите его стандартным классом XML.

Передавать через FlashVars тоже можно, хоть это и некрасиво. Про это я вам уже рассказал и показал на примере FusionCharts.

Я определилась.. в теме указано что нужно передавать через html FlashVars

Хемуль 14.07.2010 14:43

2 BonKatty:
Ну так передавайте. ^_^ Если вы знаете, как работать с FlashVars и передавать через эти переменные текстовые строки, то какая проблема с XML'ем - это тоже одна большая текстовая строка.

BonKatty 14.07.2010 14:45

Тема была создана для того чтобы узнать как. Если бы знала зачем бы спрашивала?

Хемуль 14.07.2010 14:52

2 BonKatty:
Вот руководство по поводу того, как передавать FlashVars-переменные флешкам:
http://kb2.adobe.com/cps/164/tn_16417.html
Вообще рекомендую использовать для внедрения флешки в HTML-страницу SWFObject и для передачи FlashVars-переменных использовать метод addVariable.

BonKatty 14.07.2010 14:59

спасибо. Хорошо вот конкретный пример XML как бы это выглядело через FlashVars?

Хемуль 14.07.2010 15:08

2 BonKatty:
Ну, если брать за пример те же FusionCharts, то так:
Код:

<embed
        width="450"
        height="325"
        flashvars="
                chartWidth=450&amp;
                chartHeight=325&amp;
                debugMode=0&amp;
                DOMId=SalesByYear&amp;
                registerWithJS=1&amp;
                scaleMode=noScale&amp;
                lang=EN&amp;
                dataXML=&lt;chart caption='Yearly Sales Comparison' XAxisName='Year' palette='2' animation='1' subcaption='(Click on a column to drill-down to monthly sales in the chart below)' formatNumberScale='0' numberPrefix='$' showValues='0' seriesNameInToolTip='0'&gt;&lt;categories&gt;&lt;category label='1994'/&gt;&lt;category label='1995'/&gt;&lt;category label='1996'/&gt;&lt;/categories&gt;&lt;dataset seriesname='Revenue'&gt;&lt;set value='219702' link='javaScript%3AupdateCharts%281994%29%3B'/&gt;&lt;set value='682796' link='javaScript%3AupdateCharts%281995%29%3B'/&gt;&lt;set value='547248' link='javaScript%3AupdateCharts%281996%29%3B'/&gt;&lt;/dataset&gt;&lt;dataset seriesName='Units Sold' parentYAxis='S'&gt;&lt;set value='7381'/&gt;&lt;set value='25007'/&gt;&lt;set value='18929'/&gt;&lt;/dataset&gt;&lt;styles&gt;&lt;definition&gt;&lt;style type='font' color='666666' name='CaptionFont' size='15' /&gt;&lt;style type='font' name='SubCaptionFont' bold='0' /&gt;&lt;/definition&gt;&lt;application&gt;&lt;apply toObject='caption' styles='CaptionFont' /&gt;&lt;apply toObject='SubCaption' styles='SubCaptionFont' /&gt;&lt;/application&gt;&lt;/styles&gt;&lt;/chart&gt;
        "
        allowscriptaccess="always"
        quality="high"
        name="SalesByYear"
        id="SalesByYear"
        src="FusionCharts/MSColumn3DLineDY.swf"
        type="application/x-shockwave-flash
>

Это я вам попытался синтаксически разнести более-менее. Ну и для тэга OBJECT аналогично.

BonKatty 16.07.2010 15:36

Да спасибо.. но что-то не так .
прописываю в хтлм ява скрипт:
.....
var flashvars = {name:"450"};
......
swfobject.embedSWF("readFV.swf", "myContent", "100%", "100%", "9.0.0", "expressInstall.swf", flashvars, params, attributes);....
(так как вы указали выше, только через swfobject, чтобы не дублировать)

Пытаюсь увидеть его во флеше:
import flash.display.*;
import flash.events.*;
trace(this.loaderInfo.parameters[name]);

результат: undefined
что я делаю не так или как я вообще могу его посмотреть?

Хемуль 16.07.2010 16:21

Код AS3:

this.loaderInfo.parameters[name]

name - это у вас что? Судя по всему, какая-то переменная, правда?

mayakwd 16.07.2010 16:22

Код AS3:

this.loaderInfo.parameters["name"]

как бы подсказывает Хемуль

BonKatty 16.07.2010 18:13

ну да.. но результат тот же:undefined .. как я их могу увидеть через отладку?

Lao_kutuz 16.07.2010 18:28

Цитата:

Сообщение от BonKatty (Сообщение 922218)
ну потомучто параметрі нужно генерировать с php.

так пусть php сгенерирует файл, и передаст на него ссылку. так на самом деле нормально и делается.. если хмл будет весить килобайт 100, то че делать будешь? на флешвары ограничения стоят.

BonKatty 16.07.2010 19:01

на самом деле не только пхп , для тем тоже используеться этот флеш и проще ему передавать через html.. в общем мне бы разобраться с flashVars..

Lao_kutuz 16.07.2010 23:25

ну смотри на наглядном примере. Создаешь фла файл, вписываешь код

Код AS3:

import flash.text.TextField;
 
var flashVars = stage.loaderInfo.parameters;
 
var xml        :XML = new XML(flashVars.exampleXML);
 
var showResult        :TextField = new TextField();
    showResult.border        = true;
    showResult.text        = xml.@name;
addChild(showResult);

создаешь хтмл, куда вставляешь флешку. Привожу пример стандартной вставки флеша.

Код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
        <head>
                <title>Untitled-1</title>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <style type="text/css" media="screen">
                html, body { height:100%; background-color: #ffffff;}
                body { margin:0; padding:0; overflow:hidden; }
                #flashContent { width:100%; height:100%; }
                </style>
        </head>
        <body>
                <div id="flashContent">
                        <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400" id="Untitled-1" align="middle">
                                <param name="movie" value="Untitled-1.swf" />
                                <param name="quality" value="high" />
                                <param name="bgcolor" value="#ffffff" />
                                <param name="play" value="true" />
                                <param name="loop" value="true" />
                                <param name="wmode" value="window" />
                                <param name="scale" value="showall" />
                                <param name="menu" value="true" />
                                <param name="devicefont" value="false" />
                                <param name="salign" value="" />
                                <param name="allowScriptAccess" value="sameDomain" />
                                <param name="FlashVars" value="exampleXML=<zhora name='zhorik'/>" />
                                <!--[if !IE]>-->
                                <object type="application/x-shockwave-flash" data="Untitled-1.swf" width="550" height="400">
                                        <param name="movie" value="Untitled-1.swf" />
                                        <param name="quality" value="high" />
                                        <param name="bgcolor" value="#ffffff" />
                                        <param name="play" value="true" />
                                        <param name="loop" value="true" />
                                        <param name="wmode" value="window" />
                                        <param name="scale" value="showall" />
                                        <param name="menu" value="true" />
                                        <param name="devicefont" value="false" />
                                        <param name="salign" value="" />
                                        <param name="allowScriptAccess" value="sameDomain" />
                                        <param name="FlashVars" value="exampleXML=<zhora name='zhorik'/>" />
                                <!--<![endif]-->
                                        <a href="http://www.adobe.com/go/getflash">
                                                <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>
                </div>
        </body>
</html>

обращаем внимание на строку

Код:

<param name="FlashVars" value="exampleXML=<zhora name='zhorik'/>" />
это и есть передача такой вот хмл <zhora name='zhorik'/> во флешку.
Можешь потестить, флешка принимает переменную, удачно её хавает и выводит имя

BonKatty 17.07.2010 00:05

Действительно классно. Согласна - лучшее решение по вопросу темы. Но чуть не мой случай. Мне нужно добиться чтобы кто-то мог настраивать дизайн флеша под любой темой типа ворпресса(ну именно под ней сайт написан). И желательно параметры которые сейчас флеш читает через XML переписать в html хотя бы часть , которые влияют на прокручивание и тип картинок.
Lao_kutuz - большое спасибо за пример. Но я хочу понять в чём проблема моего кода.. почему трейс его не отображает ? Где мне посмотреть? В чём проблема может быть? Вообще по идее должно же работать..

zurkis 17.07.2010 00:07

http://www.flasher.ru/forum/showpost...6&postcount=28 показали ж уже как делать, адаптируйте под свой случай, писать за Вас никто ничего не будет

BonKatty 19.07.2010 15:42

Цитата:

Сообщение от zurkis (Сообщение 922921)
http://www.flasher.ru/forum/showpost...6&postcount=28 показали ж уже как делать, адаптируйте под свой случай, писать за Вас никто ничего не будет

в принципе и не просилось писать за меня .. выше приведён код и простой вопрос почему трейс не работает? Или как я могу посмотреть содержимое переменной flashVars .. ну раз это такой сложный вопрос приношу извинения.

gloomyBrain 19.07.2010 16:26

Цитата:

выше приведён код и простой вопрос почему трейс не работает?
Чтобы заставить работать трейс в браузере используйте Mozilla Firefox, расширение FlashTracer и debug-версию плеера

BonKatty 19.07.2010 17:07

Суппер. Я вижу в тхт. Спасибо.

neo36 20.07.2010 02:41

Лучше только через хтмл передавай.
Код:

import flash.text.TextField;
import flash.events.TextEvent;
import flash.display.*;
import flash.net.URLRequest;

var koord1:int=25;
var koord2:int=300;
var koord3:int=720;
var koord4:int=600;


stop();
//сама главная страница, которая ЕБАШИТ АВТО:
var neo36_sayz:String="main.txt";



var myText:TextField = new TextField();


var rect:Shape = new Shape();//параметры четрырёхугольника
rect.graphics.beginFill(0x990000);//в который мы будем подгружать рисунки
rect.graphics.drawRect(koord1, koord2, koord3, koord4*2);//например в разделе Области Применения

var ldr2:Loader = new Loader();
var url:String="n";



function beginLoad(url:String):void {
        var request:URLRequest = new URLRequest();//создаём объект запроса
        request.url=url;//назначаем url (в данном случае относительный путь к файлу)
        var loader:URLLoader = new URLLoader();//создаём объект лоадера
        loader.addEventListener(Event.COMPLETE, eLoadComplete);//подписываемся на событие успешного окончания загрузки
        loader.addEventListener(IOErrorEvent.IO_ERROR, eLoadError);//подписываемся на события ошибок
        loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, eLoadError);

        loader.load(request);//начинаем загрузку
}

/**
 * Вызывается при успешном окончании загрузки.
 */
function eLoadComplete(e:Event):void {
        var loader:URLLoader=e.target as URLLoader;
        var loadedData:String=String(loader.data);//получаем данные из лоадера





        myText.htmlText=loadedData;//Самый ключевой момент...йоп36стал снова прогером)
        //36363636363636363636363636363636363636363636363




        freeListeners(loader);
}

/**
 * Вызывается при ошибке загрузки.
 */
function eLoadError(e:Event):void {
        var loader:URLLoader=e.target as URLLoader;
        trace('Matrix has you, and neo36 hacked your computer and delete this fucking file');
        freeListeners(loader);
}

/**
 * Отписывается от событий лоадера..
 */
function freeListeners(loader:URLLoader):void {
        loader.removeEventListener(Event.COMPLETE, eLoadComplete);//отписываемся от события успешного окончания загрузки
        loader.removeEventListener(IOErrorEvent.IO_ERROR, eLoadError);//отписываемся от событий ошибок
        loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, eLoadError);
}



а уже в техтфайлд.хтмлтекст вставляй тэги ссылок <a href внутри которых через эвенты передовай флэшу инфу

BonKatty 21.07.2010 18:18

Кул. Достучалась до XML через FlashVars. Правда длинно получилось, всё же придётся переписывать всё. Всем спасибо за потраченное на меня время.


Часовой пояс GMT +4, время: 06:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.