DynamicPlugin 大致结构:
let cacheMount = []let cacheUnMount = []let context = {}class DynamicPlugin {add(options) {if (isFunction(options))cacheMount.push(options)if (isPlainObject(options)) {let { mount, unmount } = optionsif (isFunction(mount))cacheMount.push(mount)if (isFunction(unmount))cacheUnMount.push(unmount)}// 执行当前页面加载钩子this.runMount()}runMount() {while (cacheMount.length) {let item = cacheMount.shift();item.call(context);}}runUnMount() {while (cacheUnMount.length) {let item = cacheUnMount.shift();item.call(context);}}}
页面卸载时调用 DynamicPlugin.runUnMount() 。
处理 HeadHead 部分处理来说相对比较简单,可以通过拿到新旧两个 Head,然后循环对比每个标签的 outerHTML
,用来判断哪些比是需要新增的哪些是需要删除的 。
结尾本文示例代码完整版本可以 参考这里
【Pjax 下动态加载插件方案】
经验总结扩展阅读
- 羊肉在什么温度下保鲜
- 弱弱的问一下九制橄榄怎么吃啊
- 神武天降宝箱怎么做
- 儿童可以一个人乘坐高铁吗
- 春分下雨还会冷吗
- 心中播下爱情种子,就会慢慢去经营的星座
- 感情中一味讨好,完全放下自尊的星座女
- 2023年下半年开张好日子
- 在爱的人面前才会撤下高冷面具的星座
- 海信电视怎么进入刷机模式