ExternalInterface и Javascript не работают в гармонии - PullRequest
0 голосов
/ 02 августа 2011

На днях я написал о проблеме с Flash / Javascript, которая у меня возникла.Пожалуйста, посмотрите это: Проблемы с правильной загрузкой javascript и просмотром всего Я знаю, как я хочу это исправить, но я никоим образом не знаком с ActionScript.Я избегал таких нездоровых продуктов, как чума, когда разрабатывал сам, потому что покупать их и их продукты стоит целое состояние, но крупные работодатели любят его и платят за него, поэтому я здесь.Наш «Флэш» парень только что покинул команду, и я унаследовал эту проблему.Если вы прочитаете мой другой пост, вы знаете, что происходит, поэтому я буду двигаться дальше.Я хочу сделать простой вызов из ActionScript в мой JavaScript, на который есть ссылки в моем другом посте.Я специально хочу вызвать функцию CheckboxCollection из ActionScript.Мне не нужно передавать ему аргументы или что-то в этом роде из ActionScript.Все, что мне нужно, это запустить эту функцию, как только флэш-память загрузится.Функция javascript позаботится обо всем, что мне нужно, я просто должен был вызвать ее из ActionScript, чтобы все работало гармонично.Я нахожусь в процессе обучения самому всему Adobe и ActionScript (к моему большому ужасу), но у меня действительно нет ни малейшего понятия, куда идти дальше, чтобы сделать эту работу.Я просмотрел документацию Adobe, но пока я не смог лучше понять язык в целом, я все еще потерян.Я скопировал большую часть своего ActionScript сюда, но я упустил все, что имело отношение к событиям при наведении мыши, поскольку моя проблема не связана с наведением мыши, и все они работают как шарм.Заранее спасибо!------------------------------------------------------------------------------------------- ОБНОВЛЕНИЕ: я должен был прекратить работать над этимчтобы сделать некоторые другие вещи, но я вернулся к первому шагу.Неважно, что я делаю, мне не повезло, делая эту работу.Я перепробовал все предложения здесь, и попробовал все, что я ЗНАЮ, как это сделать, но мне не повезло.Если бы кто-нибудь мог взглянуть на этот пост и тот, на который я ссылаюсь (это сопутствующий javascript для этого), и посмотреть, смогут ли они что-нибудь придумать.Я пробовал так много разных итераций своего кода, что бесполезно выставлять все свои испытания, например, что не работает, спасибо всем!

/*
JavaScript External Calls
*/
function RegisterExternalCalls():void
{ 
if(ExternalInterface.available)
    ExternalInterface.addCallback("HighlightWheel", HighlightWheel);
}
function HighlightWheel($args:String,$show:String,...arguments):void
{   
$args = $args == "financial"?"center":$args;
var _obj:Object = ObjectCollection[$args].Objects.Click;


if(ObjectCollection[$args].Objects.currentObject.name.toLowerCase() == "center")
{
    bcenter = true;
    _obj =  ObjectCollection[$args].Objects.currentObject.getChildByName("financialBtn");
}

if(CBool($show))
{

    if(arguments.length > 0 && arguments[0] == "TITLE") // || $args == "center")
        _obj.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OVER));
    else
    {

        if(ObjectCollection[$args].labels.Label.toUpperCase() === "CENTER")
        {
            ObjectCollection["income"].Objects.Click.gotoAndPlay(2);
            ObjectCollection["property"].Objects.Click.gotoAndPlay(2);
            ObjectCollection["education"].Objects.Click.gotoAndPlay(2);
            ObjectCollection["health"].Objects.Click.gotoAndPlay(2);
            ObjectCollection["retirement"].Objects.Click.gotoAndPlay(2);

        }
        else
        {               
            _obj.gotoAndPlay(2);

        }
    }


}
else
{
    if(arguments.length > 0 && arguments[0] == "TITLE")
        _obj.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OUT));
    else
    {
        if(ObjectCollection[$args].labels.Label.toUpperCase() === "CENTER")
        {
            ObjectCollection["income"].Objects.Click.gotoAndPlay(11);
            ObjectCollection["property"].Objects.Click.gotoAndPlay(11);
            ObjectCollection["education"].Objects.Click.gotoAndPlay(11);
            ObjectCollection["health"].Objects.Click.gotoAndPlay(11);
            ObjectCollection["retirement"].Objects.Click.gotoAndPlay(11);


        }
        else
        {
            _obj.gotoAndPlay(11);

        }
    }
}
}

function CallExternalFunction($label:String,$show:Boolean = true):void
{
var lbl:String = $label.toLowerCase().indexOf("btn") > -1?"financialTitle":$label     + "Title";

    if(ExternalInterface.available)
         ExternalInterface.call("COUNTRY.Financial.highlightProductGroup",lbl,$show);


}

function CBool($value:String):Boolean
{
if($value == "true")
    return true;
else
    return false;
}

function PrintSetup($evt:MouseEvent):void
{
var pjob:PrintJob = new PrintJob(); 
if(pjob.start())
{       
    pjob.addPage(wheel);

    pjob.send();
}

}

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Я полагаю, что вы делаете это через ExternalInterface.call и передаете функцию javascript, которая должна быть вызвана, вот так:

ExternalInterface.call( "CheckboxCollection" )

Если вам нужно передать аргументы:

ExternalInterface.call( "CheckboxCollection", value1, value2 )

Для получения дополнительной информации вот документация

0 голосов
/ 03 августа 2011

Если в вашем JS вам не обязательно это:

var CheckboxCollection = function()

попробуйте изменить это на:

function CheckboxCollection()

даже если кажется (если JS все тот же), у вас есть что-то вложенное. Может быть, вы тоже можете попытаться назвать это так (но я никогда не пробовал ничего подобного):

ExternalInterface.call("SOME.PLACE.QuoteRequest.CheckboxCollection");

...