我目前在一个使用 Prototype 库的大型站点项目中,并且已经有大量的 Javascript 代码。
我们现在正在处理一段代码,它将被“注入”到其他人的网站中(想象人们在他们的网站中添加 <script> 标签),然后运行我们的代码并向他们的网站添加一堆 DOM 元素和功能地点。这将有新的代码片段,并且还将重用我们在主站点上使用的大量代码。
我遇到的问题是,在人们的页面中添加一个包含 Prototype 的 <script> 当然并不酷。如果我们在已经使用任何框架的页面中这样做,我们保证会搞砸一切。
jQuery 为我们提供了“重命名”$ 对象的选项,因此它可以很好地处理这种情况,但显然我们没有使用 jQuery,因此我们必须迁移所有内容。
现在我正在考虑一些丑陋的选择,我不确定什么是最好的......
- 重写一切以使用 jQuery,到处都有一个重命名的 $ 对象。
- 仅使用我们将在“注入”代码中使用的子集创建“新”原型库,并将 $ 重命名为其他内容。然后,我必须再次调整我的代码中会以某种方式共享的部分。
- 在注入的代码中根本不使用库,以使其尽可能干净,并重写共享代码以完全不使用库。这显然会退化为我们创建自己的图书馆科学怪人,这可能是有史以来最糟糕的情况。
我想知道你们认为我能做什么,以及是否有一些神奇的选择可以解决我所有的问题......
例如,您认为我可以使用 Caja / Cajita 之类的东西来沙箱化我自己的代码并将其与网站的其他部分隔离,并在其中放置 Prototype 吗?还是我完全错过了这一点?
我还读过一次关于小书签的技术,您是否像这样添加代码:
(function() { /* your code */ })();
然后你的代码都在你的匿名函数中,你根本没有触及全局命名空间。你认为我可以制作一个包含以下内容的文件:
(function() {
/* Full Code of the Prototype file here */
/* All my code that will run in the "other" site */
InitializeStuff_CreateDOMElements_AttachEventHandlers();
})();
那行得通吗?例如,它能否实现不弄乱全局命名空间和不破坏使用 jQuery 的站点上的功能的目标?
还是原型太复杂以至于无法像那样隔离它?
(注意:我想我知道这会在任何地方创建闭包并且速度较慢,但我不太关心性能,我的代码没有做任何复杂的事情)