外部接口和 Javascript 不协调工作

发布于 2024-11-27 07:45:30 字数 3571 浏览 0 评论 0原文

有一天,我发布了有关我遇到的 Flash/Javascript 问题的文章。请看这个: JavaScript 正确加载和查看所有内容的问题 我知道我想如何解决它,但我对动作脚本不熟悉。从我发展自己的时候起,我就避免了像瘟疫一样的 adobe 产品,因为购买他们的产品要花一大笔钱,但大雇主喜欢它并为此付费,所以我在这里。我们的“Flash”家伙刚刚离开团队,我继承了这个问题。如果您阅读我的另一篇文章,您就会知道发生了什么,所以我会继续前进。我想从actionscript 到我的javascript 进行一个简单的调用,这在我的其他帖子中被引用。我特别想从动作脚本内部调用 CheckboxCollection 函数。我不需要从动作脚本内部向它传递任何参数或任何此类内容。我需要它做的就是在闪存加载完成后运行该函数。 javascript 函数将处理我需要的一切,我只需从动作脚本中调用它即可使一切协调一致。我正在自学所有关于 adobe 和 actionscript 的知识(令我非常沮丧),但我真的不知道从这里到哪里去完成这项工作。我已经审阅了 adobe 文档,但在我更好地掌握整个语言之前,我仍然迷失方向。我将大部分动作脚本复制到这里,但我确实省略了必须处理鼠标悬停事件的所有内容,因为我的问题与鼠标悬停无关,而且它们都像魅力一样工作。提前致谢! -------------------------------------------------- -----------------------------------------------------更新:我不得不停止这方面的工作完成其他一些事情,但我又回到了第一步。无论我做什么,我都没有运气让这项工作成功。我已经尝试了这里的所有建议,并尝试了我知道该怎么做的一切,但我没有运气。如果有人可以看一下这篇文章和我链接到的文章(这是此文章的配套 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();
}

}

The other day I posted about a Flash/Javascript issue I was having. Please see this:
Issues with javascript properly loading and seeing everything
I know how I want to fix it, but I am not in any way shape or form familiar with actionscript. I have avoided adobe products like the plague from when I was developing myself since it costs a fortune to buy and of their products, but big employers love it and pay for it so here I am. Our "Flash" guy just left the team and I inherited this issue. If you read my other post you know what is going on so I will move on. I want to make a simple call from actionscript to my javascript taht is referenced in my other post. I specifically want to call the CheckboxCollection function from inside of actionscript. I don't need to pass it any args or anything of the such from inside of actionscript. All I need it to do is run that function once the flash is done loading. The javascript function will take care of everything I need, I just HAVE TO HAVE IT called from actionscript to make everything work in harmony. I am in the middle of teaching myself all things adobe and actionscript(much to my dismay), but I really have no clue where top go from here to make this work. I have reviewed adobe documentation, but until I have a better grasp of the language as a whole I am still lost. I copied most of my actionscript on to here, but I did leave out everything that had to deal with mouseover events, since my issue is not about a mouseover and they all work like a charm. Thanks in advance!
-------------------------------------------------------------------------------------------UPDATE: I had to stop working on this to get some other things done, but I am back to step one. NO matter what I do I am having no luck making this work. I have tried all suggestions on here, and tried everything I KNOW how to do, but I am having no luck. If anyone could take a look at this post and the one that I link to (It is the companion javascript for this) and see if they can come up with anything. I have tried so many different iterations of my code there is no use putting all of my trials up for example of what doesn't work, Thanks Everyone!

/*
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();
}

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

司马昭之心 2024-12-04 07:45:30

我相信您通过ExternalInterface.call 执行此操作并传递应该调用的javascript 函数,如下所示:

ExternalInterface.call( "CheckboxCollection" )

如果您需要传递参数:

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

有关更多信息这里是文档

I believe you do this through ExternalInterface.call and pass the javascript function that should be called, like so:

ExternalInterface.call( "CheckboxCollection" )

If you need to pass arguments:

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

For more information here is the documentation

顾挽 2024-12-04 07:45:30

如果在你的 JS 中你不一定需要这个:

var CheckboxCollection = function()

尝试将其更改为这样:

function CheckboxCollection()

即使看起来(如果 JS 仍然相同)你有任何嵌套的东西。也许你也可以尝试这样称呼它(但我从未尝试过类似的方法):

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

If in your JS you don't need necessarily this:

var CheckboxCollection = function()

try to change it to this:

function CheckboxCollection()

even if it seems (if the JS is still the same) you have anything nested. Maybe you can try too call it this way to (but I never tried anything similar):

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文