Apache flex 是否可以通过使用SWFLoader动态加载的电影访问主机应用程序中声明的静态字段

Apache flex 是否可以通过使用SWFLoader动态加载的电影访问主机应用程序中声明的静态字段,apache-flex,flash,actionscript-3,flex3,Apache Flex,Flash,Actionscript 3,Flex3,是否可以通过动态加载的电影访问主机中声明的静态字段(前提是加载的电影来自完全受信任的域) 我主要关心的是确保我们不会将数据暴露给加载的swf,但仍希望侦听加载的swf触发的事件(通过托管的应用程序回调函数) 更新 SWFLoader(用于flex)和Loader(闪存)确实有所不同。SWFLoader包装了Loader,但在Flex API 3.2(或3.3?)之前,您似乎无法直接访问loaderscontentLoaderInfo,它被用作指向加载的swf的loaderInfo的链接,而无需

是否可以通过动态加载的电影访问主机中声明的静态字段(前提是加载的电影来自完全受信任的域)

我主要关心的是确保我们不会将数据暴露给加载的swf,但仍希望侦听加载的swf触发的事件(通过托管的应用程序回调函数)


更新

SWFLoader(用于flex)和Loader(闪存)确实有所不同。SWFLoader包装了Loader,但在Flex API 3.2(或3.3?)之前,您似乎无法直接访问loaderscontentLoaderInfo,它被用作指向加载的swf的loaderInfo的链接,而无需先访问主机SWFLoader的content属性。在Flex 3.3中,他们在SWFLoader.swfBridge上引入了一个属性(查看源代码)来公开嵌套加载程序的contentLoaderInfo.sharedEvents对象

但似乎仍然存在一个问题:swfBridge(在event.COMPLETE上)似乎为空


那么我们如何获取主机SWFLoader的contentLoaderInfo.sharedEvents对象呢?

如果您是应用程序A.swf,则从不同的域加载文件B.swf,并且在B.swf的域上有一个跨域策略文件,允许A.swf访问B.swf的内容,是的 您几乎可以访问B.swf中的所有内容,包括静态字段。你可以通过课堂阅读这些内容

如果您希望A.swf从其他域加载B.swf,但不希望A.swf访问B.swf的内容,请不要让它访问,至于事件,我记得有一个叫做。我很幸运,现在还不需要这个,但我记得在一本书中读到过这个。有一整章都是关于安全的无聊章节。很抱歉,我不能提供一个更具体的例子,因为我没有根据我的个人经验作出回应


祝你好运

加载的代码只能通过宿主应用程序传入的类和函数进行访问,这会很好。注册一个事件监听器。比如说,如果我们有一个类别a,带有静态变量(a var而非常量)B即a.B,如果我们在主机应用程序中调用a.B,在加载的swf中调用a.B,加载的应用程序是否看到相同的B?共享事件看起来很有趣。有可能有一个类别a带有静态属性B,该属性最初为null,并在Event.INIT处理程序中分配了一个值,但这取决于你进入B的程度。如果你打算使用A.B.doSomething(),这意味着你将在B.swf内调用方法doSomething,因此访问Loader.contents,这将抛出一个安全沙盒错误,因为你不允许在未经许可的情况下查看内容。SharedEvents可能是您的最佳选择。请参阅Essential Actionscript 3.0的第19章。有一个场景,一个人从一个单独的域加载横幅。我不知道我是否可以这样做,希望O'Reilly可以…只是一点文字:“在某些情况下,来自不同域的.swf文件可能会在不允许完全跨脚本权限的情况下共享事件。为了考虑这种情况,FlashPlayer提供了LoaderInfo类的实例变量sharedEvents。sharedEvents变量是一个简单、中立的对象,通过它,两个.swf文件可以相互传递事件,而无需考虑安全限制。该技术允许在没有安全会话的情况下进行基于事件的.swf间通信,该会话的编码比允许的域()选项更多。“…”让“通过一个示例场景进行六次共享。假设MyRunsFire-工作公司有一个基于灰的Promotional网站,www.blast.ca.Tommyhires acontractor,Derek,生成包含自己的鼠标效果,该效果在鼠标指针后随机生成动画FireworkExplosions。DerekC创建一个包含该效果的.swf文件MouseEffect.swf,并将其发布到www.dereksflasheffects.com/MouseEffect.swf。将TomMyToLoadMouseeEffect.swf下载到他的应用程序www.blast.ca/BlastSite.swf中。Derekandtomy同意MouseEffect.swf“。。。