AS3 Air远程外部swf无法访问本地apk

发布于 2024-11-04 21:33:23 字数 1017 浏览 0 评论 0原文

我正在使用 flash cs5 Air 扩展开发一个 android 文件。 我了解基本的跨域策略和服务器到服务器的连接。我搜索了很多页面,但没有解决这个问题。

我的“container.apk”从服务器加载“external.swf”。我希望能够访问“container.apk”中的变量和函数。 apk”来自“external.swf”。 但我无法从外部模块 swf(远程文件)访问容器(应用程序文件 .apk)上的任何功能。我的意思是,我正在尝试从加载的 swf 访问 container.apk 的功能。 就像当按钮单击“external.swf”时,它应该会影响“container.apk”中的功能。

此外,这里还有我收到的一些错误代码;

安全错误:错误 #2047:安全沙箱违规:父级:http://**.com/external.swf 无法访问 app:/container.swf**

并且我的容器的加载功能;

var l:Loader = new Loader;
var externalSWF:MovieClip;
var contextC:LoaderContext = new LoaderContext(); 
contextC.checkPolicyFile = false;
contextC.allowCodeImport = true;
l.load(new URLRequest(filePath), contextC);
l.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);


function loadComplete(evt:Event){
    l.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadComplete);
    externalSWF = l.content as MovieClip;
    MovieClip(root).addChild(externalSWF);
}

I'm developing an android file by using flash cs5 air extention.
I know the basic crossdomain policy and server to server connections. And I searched many pages but there is no solution about this.

My "container.apk" loads "external.swf" from the server.. And I want to be able to reach the variables and functions in "container.apk" from "external.swf".
But I can't reach any function on my container (application file .apk) from my external module swf (remote file).. I mean, I'm trying to reach container.apk's functions from the loaded swf. Like when a button clicked on "external.swf" it should effect a function in "container.apk".

Also here are some error codes that I'm getting ;

SecurityError: Error #2047: Security sandbox violation: parent: http://**.com/external.swf cannot access app:/container.swf**

And the loading function of my container ;

var l:Loader = new Loader;
var externalSWF:MovieClip;
var contextC:LoaderContext = new LoaderContext(); 
contextC.checkPolicyFile = false;
contextC.allowCodeImport = true;
l.load(new URLRequest(filePath), contextC);
l.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);


function loadComplete(evt:Event){
    l.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadComplete);
    externalSWF = l.content as MovieClip;
    MovieClip(root).addChild(externalSWF);
}

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

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

发布评论

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

评论(1

债姬 2024-11-11 21:33:27

我认为这是设计使然,加载的 SWF 是沙盒的。

例如,想象一下您有一个 Flash 网站并想要加载 Flash 游戏的场景。例如,如果加载的子项可以访问父项,则恶意 SWF 可以通过加载程序 SWF 获取服务器访问权限。

这也无济于事,你试图做的事情甚至更危险,通过访问 APK 及其权限,加载的 SWF 理论上可以接管手机。

然而,它应该以相反的方式工作,加载器主机应该能够访问加载的 SWF 内的任何内容,所以恐怕您必须在构建应用程序时考虑到这一点。

I think this is by design, loaded SWFs are sandboxed.

Imagine the scenario where you have a Flash website and want to load Flash games for example. If loaded children had access to parent, a malicious SWF could get server access through your loader SWF for example.

It also doesn't help that what you're trying to do is even more dangerous, by having access to the APK and its permissions, a loaded SWF could in theory take over the phone.

It should however work the other way round, the loader host should be able to access anything inside the loaded SWF, so I'm afraid you'll have to architect your app with this in mind.

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