6

我目前在一个使用 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 的站点上的功能的目标?

还是原型太复杂以至于无法像那样隔离它?
(注意:我想我知道这会在任何地方创建闭包并且速度较慢,但​​我不太关心性能,我的代码没有做任何复杂的事情)

4

2 回答 2

2

如果您将代码注入其他站点,要么要求它们还包含原型,要么根本不使用库。

在我看来,任何其他选择都太侵入性了。

于 2009-08-05T03:40:11.220 回答
0

丹尼尔,

由于某些相同的原因,我遇到了同样的问题。谢天谢地,我能够使用 jquery。我想要做的是创建一个单独的 js 文件,该文件将加载一个 jquery 实例和我需要的任何依赖库。然后我想以同样的方式加载css。

我找到了一个脚本,可以将这些文件加载​​到 DOM 中,但它们似乎不起作用。这是我正在使用的:

function loadjscssfile(filename, filetype){
 if (filetype=="js"){ //if filename is a external JavaScript file
  var fileref=document.createElement('script')
  fileref.setAttribute("type","text/javascript")
  fileref.setAttribute("src", filename)
 }
 else if (filetype=="css"){ //if filename is an external CSS file
  var fileref=document.createElement("link")
  fileref.setAttribute("rel", "stylesheet")
  fileref.setAttribute("type", "text/css")
  fileref.setAttribute("href", filename)
 }
 if (typeof fileref!="undefined")
  document.getElementsByTagName("head")[0].appendChild(fileref)
}

我可以在 firebug 中看到 css 已加载,但我的 css 文件的内容没有通过。我曾希望我可以根据这个 WIDGET 使用的工具动态加载我需要的库。所以我想做一些程序逻辑来确定应该“导入”哪些库和 css 文件。

不确定这种思路是否会影响您的努力,但我很想了解您的想法,或者看看您最终会去哪里。

于 2010-04-14T00:14:49.203 回答