Pjax 下动态加载插件方案( 二 )

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 下动态加载插件方案】

经验总结扩展阅读