【问题标题】:Drupal CiviCRM Javascript ConflictDrupal CiviCRM Javascript 冲突
【发布时间】:2011-06-07 21:24:33
【问题描述】:

在全新的 Drupal 安装中安装 CiviCRM,自定义 CiviCRM 并添加数据。实际的 Drupal 站点是在单独的安装中单独构建的。现在它已经完成,我将 CiviCRM 与新的 Drupal 站点(文件和数据库)合并。除了登录 CiviCRM:http://example.com/civicrm/dashboard 外,一切似乎都正常工作:

“您的浏览器必须启用Javascript才能使用仪表板功能。”

是的,Javascript 已启用。 CiviCRM 菜单全都坏了等等。 Chrome 还会报告以下错误:

Uncaught TypeError: Object # has no method 'menu' jquery.textarearesizer.js:5Uncaught TypeError: Object # has no method 'TextAreaResizer' main.js:6Uncaught TypeError: Object # has no method 'cycle' jquery.textarearesizer.js:5Uncaught TypeError: Object # has no method 'TextAreaResizer'

未启用性能下的 Javascript 压缩。有什么想法吗?

【问题讨论】:

  • CiviCRM 使用与 Drupal 不同的 jQuery 版本,有时它们会相互冲突。您很可能有类似的问题。您使用的是“股票” Drupal,还是定制的发行版?我们也在处理类似的问题,所以如果您发现任何有趣的事情,请告诉我。
  • @heavymark:你解决了这个问题吗?我想知道,因为我面临着类似的问题

标签: javascript drupal drupal-6 civicrm


【解决方案1】:

CiviCRM 使用 jQuery 对象作为 cj 而不是 $,以避免与 Drupal JQuery 库发生冲突。理论上,它们可以使用不同的版本,因为它们的命名空间不同(jQuery 官方支持使用 noConflict())。

您的冲突可能来自您的修改导致 Drupal 或 CiviCRM 在引导程序中的不同点加载其 jQuery 库,或者使其尝试多次加载 jQuery。这将使将 $ 转换为 cj 的操作在 Drupal jQuery 对象已经被实例化之后而不是之前获取它,从而使 Drupal 和/或 CiviCRM 没有它需要附加到 $ 对象的库(您是否使用 # 代替美元?)。

在相关页面及其 JavaScript 包括的所有位置搜索所有使用 noConflict() 的代码。你应该只在一个地方找到它。与 demo.civicrm.org 页面进行比较以查看差异,您可能会在某个地方找到一个额外的页面。修复它的最大希望是调整 Drupal 系统表中自定义模块的加载顺序,或者将第二个 noConflict() 调用设置为在没有 cj 对象的情况下有条件地运行。

【讨论】:

    【解决方案2】:

    我已经完成了bug report。应用这个补丁以一种看似干净的方式为我解决了这个问题。这样,如果不需要,jQuery 库就不会被多次加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      相关资源
      最近更新 更多