动态加载/卸载外部JS
Loading/unloading external JS dynamically
在尝试模仿Youtube等网站的过程中,并且在链接点击时只加载页面的特定片段,我尝试了一个加载/卸载当前页面所需的特定JS文件和CSS文件的函数。
我注意到,当CSS文件从DOM中删除时,该文件的样式不再有效,只有当我再次添加特定的link
标记时才会再次有效。然而,JS文件似乎在加载时被存储在内存中,简单地删除DOM中的引用并不能阻止与该文件相关的函数仍然工作。Youtube是如何解决这个问题的,或者你有你自己的建议,我应该去哪条路径实现卸载/加载JS文件"完全"?
我的一个想法是只是有所有的变量,元素id等在我的代码(当涉及到HTML和JS)是唯一的,并有一个数组,保持检查哪些JS文件已加载-这样就不会有超过一个每个JS文件在内存中。但我想这不是一个安全的解决方案,因为GC可以从内存中删除一个JS文件,如果"页面"没有使用很长时间?
你可以将一个变量设置为null,然后垃圾收集器将从内存中清除它,这样,你可以动态地加载你的javascript到一个变量中,这样以后你就可以将它设置为null。你的文件可以有一个对象或者是一个构造函数。
这只是一个基本的解释,然而,我的建议是你检查angularjs, reactjs和许多其他框架适合开发单页应用程序。
如果你已经开发了一些东西,requierejs是一个动态加载依赖的库,它的实现非常直接和容易。
缓存是另一回事,你可以通过加载文件的方式来避免/刷新缓存。您可以添加一个查询参数的url,如一个时间戳。这样,文件的url每次都会不同,并且浏览器不会从缓存中加载它。您还可以使用报头来告诉浏览器何时应该从缓存中刷新文件,甚至阻止它缓存它。
- 如何在运行时在angular 2中加载外部js脚本
- 我的外部js文件无法加载
- 像createComment这样的各种自定义变量名在内联javascript中被覆盖,但在外部js中没有.为什么?
- 在使用cq:include包含外部JS之前,如何在JSP中包含全局JS变量
- AJAX在Django的外部JS文件中发布
- jqueryajax调用是复制url,当在模态视图之后在外部js文件中进行调用时
- Javascript:获取“;FORM”;它是在.html到外部.js文件中创建的
- 有没有办法在Node/Webpack中预先准备外部JS工具
- 如何在外部js文件中实现谷歌地图api3
- 在外部JS执行后加载JavaScript
- 外部JS文件可以'不得执行
- Jade-包含来自外部js文件的var
- IE 9 BHO插件.加载外部JS文件时出现错误SCRIPT1014
- 从外部js文件编辑现有的谷歌地图
- Javascript散列导航&外部js文件
- 将HTML文件中的变量与外部JS文件一起使用
- 从Phaser游戏JS向外部JS触发事件
- 从HTML中的外部JS文件调用函数
- 如何执行被用户屏蔽的外部JS文件'adblockers
- 使用node.js时包含外部js