加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

除了RSL,Flex框架底层还会默认加载些什么?

发布时间:2020-12-15 05:11:46 所属栏目:百科 来源:网络整理
导读:我们知道Flex程序启动之初,能够默认加载RSL。此外还会默认加载些什么呢? 通过对Flex框架源代码的分析,可以得知Flex框架默认加载三种类型的对象: (1)。经过Adobe数字签名的跨域RSL (2)。我们自定义的RSL (3)。国际化应用中使用到的ResourceModule,

我们知道Flex程序启动之初,能够默认加载RSL。此外还会默认加载些什么呢?

通过对Flex框架源代码的分析,可以得知Flex框架默认加载三种类型的对象:

(1)。经过Adobe数字签名的跨域RSL

(2)。我们自定义的RSL

(3)。国际化应用中使用到的ResourceModule,其文件扩展名也是swf。

?

>>源代码佐证:

下面代码中红色字体代表两个数组,分别保存有RSL列表和ResourceModule列表。这两个列表作为参数被传入到进度条实例中,由进度条循环这两个列表来加载相应内容。

(注:灰色背景加删除线的内容是为了突出标题内容而作的视觉处理)

代码源文件:mx.managers.SystemManager.as

?

??? /**
???? *? @private
???? *? Creates an instance of the preloader,adds it as a child,and runs it.
???? *? This is needed by Flash Builder. Do not modify this function.
???? */
??? mx_internal function initialize():void
??? {
??????? var runtimeDPIProviderClass:Class = info()["runtimeDPIProvider"] as Class;
??????? if (runtimeDPIProviderClass)
??????????? Singleton.registerClass("mx.core::RuntimeDPIProvider",runtimeDPIProviderClass);
???????
??????? if (isStageRoot)
??????? {
??????????? // TODO: Finalize scaling behavior
??????????? Stage_resizeHandler();
??????????? // _width = stage.stageWidth;
??????????? // _height = stage.stageHeight;
??????? }
??????? else
??????? {
??????????? _width = loaderInfo.width;
??????????? _height = loaderInfo.height;
??????? }

??????? // Create an instance of the preloader and add it to the stage
??????? preloader = new Preloader();

??????? // Listen for preloader events
??????? // preloader notifes when it is ok to go to frame2
??????? preloader.addEventListener(FlexEvent.PRELOADER_DOC_FRAME_READY,
?????????????????????????????????? preloader_preloaderDocFrameReadyHandler);
??????? // wait for a complete event.? This gives the preloader
??????? // a chance to load resource modules before
??????? // everything really gets kicked off
??????? preloader.addEventListener(Event.COMPLETE,
?????????????????????????????????? preloader_completeHandler);
??????? // when the app is fully backed remove the preloader and show the app
??????? preloader.addEventListener(FlexEvent.PRELOADER_DONE,
?????????????????????????????????? preloader_preloaderDoneHandler);
??????? preloader.addEventListener(RSLEvent.RSL_COMPLETE,
?????????????????????????????????? preloader_rslCompleteHandler);

??????? // Add the preloader as a child.? Use backing variable because when loaded
??????? // we redirect public API to parent systemmanager
??????? if (!_popUpChildren)
??????? {
??????????? _popUpChildren = new SystemChildrenList(
??????????????? this,new QName(mx_internal,"noTopMostIndex"),"topMostIndex"));
??????? }
??????? _popUpChildren.addChild(preloader);

?

??????? //?取出跨域RSL、自定义的RSL

?????? var rsls:Array = info()["rsls"];
??????? var cdRsls:Array = info()["cdRsls"];


??????? var usePreloader:Boolean = true;
??????? if (info()["usePreloader"] != undefined)
??????????? usePreloader = info()["usePreloader"];

??????? var preloaderDisplayClass:Class = info()["preloader"] as Class;

?

??????? //?定义RSL列表

??????? var rslItemList:Array = [];
??????? var n:int;
??????? var i:int;

?????? //编辑RSL列表,把Adobe数字签名的跨域RSL加入列表
??????? if (cdRsls && cdRsls.length > 0)
??????? {
??????????? if (isTopLevel())
??????????????? rslDataList = cdRsls;
??????????? else
??????????????? rslDataList = LoaderUtil.processRequiredRSLs(this,cdRsls);
???????????
??????????? var normalizedURL:String = LoaderUtil.normalizeURL(this.loaderInfo);
??????????? var crossDomainRSLItem:Class = Class(getDefinitionByName("mx.core::CrossDomainRSLItem"));
??????????? n = rslDataList.length;
??????????? for (i = 0; i < n; i++)
??????????? {
??????????????? var rslWithFailovers:Array = rslDataList[i];

??????????????? // If crossDomainRSLItem is null,then this is a compiler error. It should not be null.
??????????????? var cdNode:Object = new crossDomainRSLItem(rslWithFailovers,
??????????????????????????????????????????????????? normalizedURL,
??????????????????????????????????????????????????? this);
??????????????? rslItemList.push(cdNode);??????????????
??????????? }
??????? }

?

?????? //编辑RSL列表,把我们自定义的RSL加入列表

??????? // Append RSL information in the RSL list.
??????? if (rsls != null && rsls.length > 0)
??????? {
??????????? if (rslDataList == null)
??????????????? rslDataList = [];
???????????
??????????? if (normalizedURL == null)
??????????????? normalizedURL = LoaderUtil.normalizeURL(this.loaderInfo);

??????????? n = rsls.length;
??????????? for (i = 0; i < n; i++)
??????????? {
??????????????? var node:RSLItem = new RSLItem(rsls[i].url,
?????????????????????????????????????????????? normalizedURL,
?????????????????????????????????????????????? this);
??????????????? rslItemList.push(node);
??????????????? rslDataList.push([new RSLData(rsls[i].url,null,
????????????????????????????????? false,false,"current")]);
??????????? }
??????? }

?

?????? //定义并编辑ResourceModule列表

??????? // They can also specify a comma-separated list of URLs
??????? // for resource modules to be preloaded during frame 1.
??????? var resourceModuleURLList:String =
??????????? loaderInfo.parameters["resourceModuleURLs"];
??????? var resourceModuleURLs:Array =
??????????? resourceModuleURLList ? resourceModuleURLList.split(",") : null;

??????? var domain:ApplicationDomain =
??????????? !topLevel && parent is Loader ?
??????????? Loader(parent).contentLoaderInfo.applicationDomain :
??????????? info()["currentDomain"] as ApplicationDomain;

?

?????? //把RSL列表和ResourceModule列表传入进度条实例,供其使用

??????? // Initialize the preloader.
??????? preloader.initialize(
??????????? usePreloader,
??????????? preloaderDisplayClass,
??????????? preloaderBackgroundColor,
??????????? preloaderBackgroundAlpha,
??????????? preloaderBackgroundImage,
??????????? preloaderBackgroundSize,
??????????? isStageRoot ? stage.stageWidth : loaderInfo.width,
??????????? isStageRoot ? stage.stageHeight : loaderInfo.height,
??????????? null,
??????????? rslItemList,
??????????? resourceModuleURLs,??????????? domain); ??? }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读