Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Передать переменную из флешки (http://www.flasher.ru/forum/showthread.php?t=152434)

demy 17.03.2011 18:08

Передать переменную из флешки
 
Доброго времени суток.
Подскажите пожалуйста, как можно передать переменную не во флешку, а из нее.
То есть, есть html + js страница с флешкой.
Во флешке вычисляется переменная.
Эту переменную надо передать обратно на страницу, чтобы использовать в качестве высоты флешки.

Криво объясняю, конечно, да я действо не из прямых.
Суть в том, что страница не знает, какой высоты должна быть флешка, а флеш должен ей это сообщить.
(ведь вроде нельзя изменить высоту swf из AS3 программно)
Сомневаюсь, что это вообще возможно... Но если есть способ...

gloomyBrain 17.03.2011 18:17

Код AS3:

var value:Number = Math.PI;
 
if (ExternalInterface.available) {
ExternalInterface.call("setPIValue", value);
}

А в яваскрипте должна быть функция setPIValue, принимающая в параметр некое число

demy 17.03.2011 18:31

Большое спасибо, а можно код функции?
Пока попробовала:
Код AS3:

if (ExternalInterface.available) {
        ExternalInterface.call("setFlashWidth", value);
}

Код:

<!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>940x124</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>
                <script>
                function setFlashWidth(width) {
                        document.getElementById('940x124').width = width;
                }
                </script>
        </head>
        <body>
                <div id="flashContent">
                        <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="940" height="124" id="940x124" align="middle">
                                <param name="movie" value="940x124.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="transparent" />
                                <param name="scale" value="showall" />
                                <param name="menu" value="true" />
                                <param name="devicefont" value="false" />
                                <param name="salign" value="" />
                                <param name="allowScriptAccess" value="sameDomain" />
                                <!--[if !IE]>-->
                                <object type="application/x-shockwave-flash" data="940x124.swf" width="940" height="124">
                                        <param name="movie" value="940x124.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="transparent" />
                                        <param name="scale" value="showall" />
                                        <param name="menu" value="true" />
                                        <param name="devicefont" value="false" />
                                        <param name="salign" value="" />
                                        <param name="allowScriptAccess" value="sameDomain" />
                                <!--<![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>

Но как-то не очень он меня понял..

gloomyBrain 17.03.2011 18:58

Так Вы ничего не добьетесь =)
Внутри флешки нужно подписаться на ресайз от стейджа, а яваскриптом менять ширину дива, в котором находится флешка. Ну и, соответственно, в параметрах вставки флешки ее ширину нужно указать в процентах.
Код AS3:

public class Main extends Sprite {
 
        public function Main() {
 
                super();
 
                if (super.stage) this.init();
                else super.addEventListener(Event.ADDED_TO_STAGE, init);
 
        }
 
        private function init(event:Event = null):void {
 
                super.removeEventListener(Event.ADDED_TO_STAGE, init);
                super.stage.scaleMode = StageScaleMode.NO_SCALE;
                super.stage.align = StageAlign.TOP_LEFT;
 
                // entry point
 
                super.stage.addEventListener(event.RESIZE, onStageResize);
 
        }
 
        private function onStageResize(event:Event):void {
 
                // перерисовываем внутренности
 
        }
 
}


maxkar 18.03.2011 00:48

Цитата:

Но как-то не очень он меня понял..
А в чем именно проблема выражается? Возможны несколько вариантов.
1. ExternalInterface.available - false. Проверяется, например, trace'ом, выводом в текстовое поле или работой следующих примеров.
2. Ошибок (исключений) при вызове ExternalInterface.call никаких нет? Исключений там, например. Видно в DebugPlayer, если ошибки нигде не отлавливаются.
3. В javascript метод вызывается? Поменяйте скрипт на следующее:
Код:

                <script type="text/javascript" language="JavaScript">
                function setFlashWidth(width) {
                        alert("It works! Width is " + width);
                        document.getElementById('940x124').width = width;
                }
                </script>

4. В HTML-коде два вложенных тега Object. Сейчас код устанавливает размер только у внешнего. У внутреннего размер остается фиксирован. А во всяких firefox как раз определяющим является внутренний Object. Так что нужно дать ID-шники обоим элементам и размер устанавливать у них обоих.

surlac 18.03.2011 01:25

Цитата:

Сообщение от gloomyBrain (Сообщение 981321)
Код AS3:

if (ExternalInterface.available) {
ExternalInterface.call("setPIValue", value);
}


Или
Код AS3:

var url:String = "javascript:setPIValue('" + value + "')";
navigateToURL(new URLRequest(url));


demy 18.03.2011 10:46

Спасибо, надо пробовать.


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

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