【发布时间】:2020-12-16 11:01:28
【问题描述】:
前提:我需要制作一个透明可重用的小部件,它使用 jQuery 并且可以在任何页面上工作(即使页面加载并使用它自己的 jQuery 版本);小部件将通过托管页面上的单个 <script="widget.js"> 标签加载。
我知道 noConflict() 建议的解决方案,例如 https://stackoverflow.com/a/528251/1710180
我有两个担心:
- 由于小部件本身是通过 JS 标签加载的,因此它将插入到文档中以加载 jQuery 库的任何
<script src="jquery.js">标签都将异步加载(AFAIK 即使使用document.write());因此,两步noConflict()分辨率充其量是不可靠的。 - 小部件还需要加载各种 jQuery 插件;一旦 jQuery 可以在不与
jQuery_widget全局冲突的情况下解决,我怎么能让这些插件绑定到jQuery_widget而不是jQuery?
我能想到的最佳解决方案是使用 ES6 处理器编译和打包整个混乱;这至少可以解决我在全局命名空间中的 jQuery 名称冲突;但是,我将使用的一些插件不是 ES6 就绪的,所以第 2 点)仍然不会被这个解决方案解决,因为它们不会使用 ES6 导入。
想到的另一个肮脏的解决方案是将所有内容加载到 iframe 中并使用iframe.contentWindow.$ 来操作主机窗口;我不知道jQuery的跨框架有多可靠,我从来没有尝试过这样的东西。
【问题讨论】:
标签: javascript jquery ecmascript-6