1

我有一个 javascript 库,可以在不同类型的网站上运行,例如 wordpress 或 magento。js库动态加载jQuery并调用noConflict分配给脚本元素的onereadystatechange()中的另一个变量命名空间。但是,如果该站点还在我的 js 库之前加载了 Prototype js,则可能会发生 Prototype 和 jQuery 之间的冲突。

在调用 onereadystatechange 回调之前,可能会解析页面并调用 Prototype 函数。如果该 Prototype 函数使用任何“$”,它会导致该函数失败,因为该美元符号“$”仍然是 jQuery,而不是 Prototype(在调用 jQuery.noConflict() 之前)。

我目前的解决方案是检查原型版本并在 jQuery 之后再次动态加载它。像这样的东西:

var deps = [];
if(!hasJQueryReqVersion()) {
      deps.push("//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js");
      if ( typeof Prototype !== "undefined" ) { // if ptototype exists, load it again to avoid conflict
            deps.push("//ajax.googleapis.com/ajax/libs/prototype/"+Prototype.Version+"/prototype.js");
      }
   }
// iterate deps and create javascript elements

我可以要求 jQuery 根本不要使用 '$',这样就不需要出于上述原因再次加载 Prototype 了吗?

4

0 回答 0