【发布时间】:2010-11-16 21:18:29
【问题描述】:
我目前的项目是一个使用 Prototype 库的大型网站,并且已经有大量的 Javascript 代码。
我们现在正在处理一段代码,它将被“注入”到其他人的网站中(想象人们在他们的网站中添加
我遇到的问题是,在人们的页面中添加一个包含 Prototype 的
现在我正在考虑一些丑陋的选择,但我不确定什么是最好的......
- 重写所有内容以使用 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 的网站上的功能的目标?
还是原型太复杂以至于无法像那样隔离它?
(注意:我想我知道这会在任何地方创建闭包并且速度较慢,但我不太关心性能,我的代码没有做任何复杂的事情)
【问题讨论】:
-
通常,当您在其他网站上注入代码时,您只提供了主应用程序的一小部分功能,因此只需在“本机”javascript 中编写所需的功能是有意义的。但是,您的项目似乎并非如此。我认为它可以与匿名包装函数一起使用。一些小书签具有动态加载所需库的例程。执行一些测试以确认该技术确实有效,应该很快。 :)
标签: javascript prototypejs global-namespace