2013-10-23 111 views
0

我发现了如何加载一个或多个外部SWF文件,用我的AIR iOS应用程序打包的几个信息,实际的工作代码为:加载和重新加载在AIR外部SWF为iOS

var myUrlRequest:URLRequest = new URLRequest(mySWF); 
var myLoaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null); 
var loader: Loader = new Loader(); 
loader.load(myUrlRequest, myLoaderContext); 
Object(root).MK.addChild(loader) 

它适用于Android设备和Windows PC上,但在iOS上,它仅在第一次加载外部SWF。在我的项目中,我有几个加载外部SWF的按钮,但每个按钮只能在第一次运行。

有什么想法?如果我无法重新加载SWF,这似乎很无用。

+0

我很确定在iOS上你不能加载任何代码,所以也许这是你正在发生的事情?还有这个[SO线程](http://stackoverflow.com/questions/15411603/air-3-6-ios-load-external-swf-with-abc),可能会流露出一些光芒。 –

+1

使用AIR 3.7(现在我使用3.9),您可以使用代码加载外部SWF ...上述脚本执行此操作,但无法进行RELOAD! –

回答

0

如果你第二次不能加载某些东西,或许最好是简单地缓存它,并指出只加载一次?

0

处理此问题的一个好方法是首次将SWF文件加载到单独的影片剪辑中,然后当需要随时加载它们时,只显示那些已加载SWF文件的影片剪辑。

0

无法加载包含任何ActionScript ByteCode(ABC)的SWF文件,然后将其卸载并在iOS上重新加载它。如果您尝试执行此操作,则运行时会引发错误3764.

0

加载SWF时即使没有第二次代码也会出现问题。我找到的解决方案取决于代码是来自应用程序区域(与应用程序一起打包)还是外部加载(无论是从网站还是下载到缓存文件夹)。 我写了一个扩展后约在这里,如果你有兴趣:http://www.eqsim.com/blog/?p=400 简单地说,这里是我的设置路径代码:

var moduleDirectoryPath = "/modules/"; 

if (externalContent == FROM_CACHE) { 
    moduleDirectoryPath = File.cacheDirectory.url + moduleDirectoryPath; 
} else if (externalContent == FROM_WEB) { 
    moduleDirectoryPath = "http://our-online-content.com" + moduleDirectoryPath; 
} 

那么这里是我准备的路径代码,如果SWF从应用领域或以其他方式(高速缓存或网络):

if (loadFromApp) { 
    path = moduleDirectoryPath + module_folder + "/" + module + "?nf="+getTimer(); 
} else { 
    path = moduleDirectoryPath + module_folder + "/" + module; 
} 

最后,我装的语句:

request = new URLRequest(path); 
request.cacheResponse = false; 
request.useCache = false; 
_lc = new LoaderContext(false, ApplicationDomain.currentDomain, null); 
moduleLoader.load(request, _lc); 

,现在我可以加载小号WF的并重新加载它们(更重要的是)。当然,SWF中没有字节码。