Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   JS -> AS3 - принцип работы функции AS3 (http://www.flasher.ru/forum/showthread.php?t=130162)

Чттос 19.09.2009 03:06

JS -> AS3 - принцип работы функции AS3
 
Здравствуйте.
я совсем недавно перешла на АS3, такчто сильно не ругайте. пытаюсь разобраться с эвентами в яваскрипте, которые потом вызывают функцию во флэше.
главный вопрос который меня мучает - это как работает потом эта вызванная функция? может ли она вызвать еще функции во флэше? вот код который я пишу в AS: яваскрипт говорит что изменен размер окна браузера, по этому эвенту я запускаю новую функцию tailleBrowser(), которая в свою очередь изменяет размер rond - объекта на сцене. Но эта функция (tailleBrowser) не запускается :( как быть? чего-то я не допонимаю. помогите пожалуйста!
Код AS3:

function tailleBrowser(){
        var reponse:Number=ExternalInterface.call("addNumbers");
        rond.width = reponse/10;
}
 
function resizeFenetre(name:String):String {
        tailleBrowser();
        return "ok";
}
 
ExternalInterface.addCallback("resizeFenetre", resizeFenetre);

код в html:
Код:

<script language="JavaScript" type="text/javascript">

function addNumbers(){
        w = document.body.clientWidth;
        return (w);
}

window.onresize = function(){
        var callResult = numbers.myFunction("resizeFenetre");
}
</script>


Stargazer 19.09.2009 04:06

Цитата:

numbers.myFunction("resizeFenetre")
Я вот эту часть не понимаю. Что за myFunction? (я по js не специалист, может просто не знаком с деталями)

wvxvw 19.09.2009 04:16

1. document.body.clientWidth
- вы в курсе, что это не во всех браузерах работает?
2. вы нигде не вызываете никакие методы флешки, так что сложно сказать, что у вас не получается.
Ну и поставьте себе Фаирбаг, он вам ве расскажет лучше нас :)
Что еще приятнее, JS код можно писать прямо во флешке, а потом отдавать его яваскрипту на выполнение (так и кода меньше получится, да и приятно, когда контроль весь в одном месте).

Чттос 19.09.2009 12:15

почти весь код яваскрипт я скопировала из хелпа, кроме некоторых деталей таких как document.body.clientWidth, но в ИЕ он работает, это точно (мне пока его достаточно)
честно говоря - я обыскалась как вставлять яваскрипт во флэш, нет ли у вас простого примера, плиз?
и еще, я просто начинаю сомневаться в работоспособности моей функции resizeFenetre. что я в нее не вставляю до строки return, ничего не срабатывает.
Цитата:

вы нигде не вызываете никакие методы флешки, так что сложно сказать, что у вас не получается.
а разве не достаточно просто изменить свойство чего-либо чтоб понять работают функции или нет?
и что такое Фаирбаг и где его взять?? :)
заранее большое спасибо!

wvxvw 19.09.2009 15:03

FairBug - плагин для FireFox позволяет дебажить JavaScript. В FireFox открываем Tools > Add-Ons > Get Add-Ons. Ищем FireBug > устанавливаем, перезапускаем ФФ - живем счастливо :)
Пример использования яваскрипта в АS3:
Код AS3:

public function createReceiver():Boolean
{
        if (!_available) return false;
        ExternalInterface.addCallback("as3receive", as3receive);
 
        var getId:String =
        <![CDATA[function(){
                var objects = document.getElementsByTagName("object");
                for (var p in objects)
                {
                        if (objects[p].data == "]]> + _ourURL +
        <![CDATA[")        return objects[p].id;
                }
        }
        ]]>;
        _ourID = ExternalInterface.call(getId);
 
        var script:String =
        <![CDATA[function(){
                var b = document.getElementsByTagName("body")[0];
                var d = document.createElement("div");
                d.setAttribute("id", "]]> + _id +
        <![CDATA[");
                d.as3send = function()
                {
                        var flash = document.getElementById("]]> + _ourID +
        <![CDATA[");
                        return flash.as2receive.apply(flash, arguments);
                }
                d.as2send = function()
                {
                        var flash = document.getElementById("]]> + _ourID +
        <![CDATA[");
                        return flash.as3receive(arguments);
                }
                d.style.visibility = "hidden";
                d.style.display = "none";
                b.appendChild(d);
        }]]>;
        ExternalInterface.call(script);
        return true;
}
 
public function as3send(command:String):*
{
        if (!_available) return undefined;
        var script:String =
        <![CDATA[function(){
                var objects = document.getElementsByTagName("object");
                var o = document.getElementById("]]> + _id +
        <![CDATA[");
                return o.as2send("]]> + command +
        <![CDATA[");}]]>;
        return ExternalInterface.call(script);
}

Скопипастил что первое под руку попалось, но какое-то представление дать должно...

В AS3 вы не можете задать свойства флешке, только вызвать функцию, для этого вы должны эту функцию добавить используя
Код AS3:

ExternalInterface.addCallback("alias", theFunction);

После чего вызывать ее из JS:
Код:

var flash = document.getElementsByTagName("object")[0];
flash.alias("Helo world!");

При этом во флеше будет вызвана функция
Код AS3:

public function theFunction(input:String):void
{
    trace(input);
}

И вы должны увидеть в консоле Helo world!.

Felicast 19.09.2009 15:48

Цитата:

FairBug
firebug

wvxvw 19.09.2009 16:44

Ой, ага :) поправил

Чттос 20.09.2009 15:01

спасибо большое, буду дальше пытаться разбираться :)


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

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