嵌入式Flash对象可以访问其父文档的DOM吗?

dev*_*dev 5 javascript flash dom

我只是好奇Flash对象是否可以访问嵌入它的文档的DOM.

Rob*_*sto 7

是的,通过ExternalInterface类.

您可以在Flash电影中调用Javascript,并获取有关您心愿的页面的任何公开信息.

附录

看了一年半之后,我决定添加一些例子:

假设您的客户端页面上有一个JS函数,如下所示:

function foo(bar,type) {
  // do something with bar and type
}
Run Code Online (Sandbox Code Playgroud)

你可以从Flash(使用AS3)调用它,如下所示:

ExternalInterface.call(foo, bar, type);
Run Code Online (Sandbox Code Playgroud)

请注意,函数名称是第一个对象,之后依次列出参数.

要将Flash影片的方法暴露给Javascript之外,您可以在Flash或Flex(再次,AS3)中执行此操作:

application1_applicationCompleteHandler(event:Event) {
  // the app has finished loading, so do whatever we
  // have to do on load, plus add that callback
  ExternalInterface.addCallback(foo, bar);
}

public function bar(arg1, arg2) : void {
  // do something with arg1 and arg2
}
Run Code Online (Sandbox Code Playgroud)

在页面上的Javascript中,您可以像这样调用它(其中myMovie是SWF的ID):

myMovie.foo(anArg, anotherArg);
Run Code Online (Sandbox Code Playgroud)

在该addCallback方法中,第一个参数是函数的外部名称,第二个参数是将被调用的闭包.