使用iframe时,可以动态加载库

时间:2016-12-14 15:41:37

标签: javascript jquery iframe extjs

美好的一天。 我有一个很大的Ext js应用程序,我必须在其中插入一个将在iframe中加载的新部分。 为了维护Ext js的路由,新部分的每个页面将是不同的view,其中viewController不同,其中只有iframe将加载新应用程序的页面。< / p>

现在我想在混乱中进行一些清理,例如,所有新的应用程序页面都将使用一些共享库,这些库将被插入到Extjs的app.json中,以便它们可用于每个iframe页面。 但是这些新页面的大多数脚本都是特定于那个页面的,所以如果所有这些脚本都必须插入到app.json中,那么这将大大浪费资源,因此它们可用于每个部分。应用。 我的想法是,是否有一种简洁的方法来指定仅由单个viewController(及其iframe)使用的一些库,当用户更改路由时,一切都被销毁并且内存被清除?

1 个答案:

答案 0 :(得分:1)

如果只在调用窗口或框架时需要加载特定的js,最好的方法是使用名为loadScript的Ext.Loader方法

Ext.loader.loadScript(url)
  

加载指定的脚本URL并调用提供的回调。如果在Ext#isReady之前调用此方法,则脚本的加载将延迟转换为就绪。这可以用于加载可能包含更多Ext.require调用的任意脚本。

还要记住你的html5!因此,您可以在需要时使用其他方法加载js脚本。一个例子:

System.import("yourScriptFile.js").then(function(){
   // script loaded.
});

如果您想加载多个文件,也可以使用它:

Promise.all(["url1", "url2"].map(System.import)).then(function(){
    // loaded all here
});

如果你需要销毁窗口iframe,你只需要使用close方法,因为你可以se here关闭默认情况下的方法将从dom中删除窗口并从内存中销毁对象

所以,在我看来,最好的方法是使用iframe窗口,并使用close方法在生命结束时销毁它们。

如果您只需要使用一个容器,在该容器中使用js脚本插入新的html,则可以调用一个简单的.destroy()方法。

请记住,还有其他方法可以将项目的app.js拆分为不同的部分,还可以看一下here的想法。