从ExternalInterface.addCallback查找方法名称

发布于 2024-11-08 19:47:01 字数 461 浏览 6 评论 0原文

假设我们有许多 ExternalInterface.addCallback 函数,如下所示:

ExternalInterface.addCallback( 'foo', handler );
ExternalInterface.addCallback( 'bar', handler );
ExternalInterface.addCallback( 'foobar', handler );

在函数 handler 中,我想找到通过外部接口调用的方法名称,例如foo、bar 或 foobar;有办法吗?例如:

private function handler(...args):void
{
     arguments.callee.arguments[ 0 ];
}

但我怀疑这会起作用

Let's say we have a number of ExternalInterface.addCallback functions, like so:

ExternalInterface.addCallback( 'foo', handler );
ExternalInterface.addCallback( 'bar', handler );
ExternalInterface.addCallback( 'foobar', handler );

In the function handler I'd like to find the method name called through the external interface, such as foo, bar or foobar; is there a way? Eg:

private function handler(...args):void
{
     arguments.callee.arguments[ 0 ];
}

But I doubt that'll work

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

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

发布评论

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

评论(2

何以畏孤独 2024-11-15 19:47:01

这应该有效。只需传递一个从 JavaScript 中标识您的函数的参数,例如字符串。因此,当您在 javascript 代码中调用 flash 函数时,请传递一个字符串,然后在处理函数中解析该字符串。例如:

动作脚本:

ExternalInterface.addCallback( 'foo', handler );

private function handler(s:String):void
{
     if(s == "foo") {
       //foo specific code
     }
}

javascript:

document.getElementById('flashObj').foo("foo");

This should work. Just pass a parameter that identifies your function from the javascript, for example a string. So when you call the flash-function in your javascript code, pass a string, which you then parse in your handler function. For example:

actionscript:

ExternalInterface.addCallback( 'foo', handler );

private function handler(s:String):void
{
     if(s == "foo") {
       //foo specific code
     }
}

javascript:

document.getElementById('flashObj').foo("foo");
纵性 2024-11-15 19:47:01

不完全是您所要求的,但它会给您所需的信息。
只需将您发送的第一个参数设置为函数名称,或者在本例中为具有 funcname 属性的对象,以便您可以测试它是否存在。

JavaSCript

 function thisMovie(movieName) {
     if (navigator.appName.indexOf("Microsoft") != -1) {
         return window[movieName];
     } else {
         return document[movieName];
     }
 }
    thisMovie("ExternalInterfaceExample").genericCallBack({ funcname:'foo' })
    thisMovie("ExternalInterfaceExample").genericCallBack({ funcname:'poo' })
    thisMovie("ExternalInterfaceExample").genericCallBack({ funcname:'moo' })

AS3

public function foo( ):void{
  trace('in foo')
}

public function poo( ):void{
  trace('in poo')
}

public function moo( ):void{
  trace('in moo')
}
public function genericCallBack( o:Object ):void{
  trace( 'calling '+o.funcname)
  this[o.funcname]()
}


// add this somewhere in your init process
ExternalInterface.addCallback( 'genericCallBack', genericCallBack );

Not exactly what you are asking for, but it will give you the info you need.
Just make the first parameter that you send the function name or in this case the object with funcname attribute so you can test if it exists.

JavaSCript

 function thisMovie(movieName) {
     if (navigator.appName.indexOf("Microsoft") != -1) {
         return window[movieName];
     } else {
         return document[movieName];
     }
 }
    thisMovie("ExternalInterfaceExample").genericCallBack({ funcname:'foo' })
    thisMovie("ExternalInterfaceExample").genericCallBack({ funcname:'poo' })
    thisMovie("ExternalInterfaceExample").genericCallBack({ funcname:'moo' })

AS3

public function foo( ):void{
  trace('in foo')
}

public function poo( ):void{
  trace('in poo')
}

public function moo( ):void{
  trace('in moo')
}
public function genericCallBack( o:Object ):void{
  trace( 'calling '+o.funcname)
  this[o.funcname]()
}


// add this somewhere in your init process
ExternalInterface.addCallback( 'genericCallBack', genericCallBack );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文