在全新的 Drupal 安装中安装了 CiviCRM,自定义了 CiviCRM 并添加了数据。实际的 Drupal 站点是在单独的安装中单独构建的。现在它已完成,我将 CiviCRM 与新的 Drupal 站点(文件和数据库)合并。除了登录 CiviCRM 时,一切似乎都正常工作:http://example.com/civicrm/dashboard它说:
“必须在您的浏览器中启用 Javascript 才能使用仪表板功能。”
是的,Javascript 已启用。 CiviCRM 菜单全都坏了等等。 Chrome 还报告以下错误:
未捕获的类型错误:对象 # 没有方法“菜单” jquery.textarearesizer.js:5Uncaught TypeError: 对象 # 没有方法 'TextAreaResizer' main.js:6Uncaught TypeError: 对象 # 没有方法 'cycle' jquery.textarearesizer.js:5Uncaught TypeError: 对象 # 没有方法 'TextAreaResizer'
未启用性能下的 Javascript 压缩。有什么想法吗?
最佳答案
CiviCRM 使用 jQuery 对象作为 cj 而不是 $ 以避免与 Drupal JQuery 库发生冲突。理论上,它们可以使用不同的版本,因为它们的命名空间不同(jQuery 官方支持使用 noConflict())。
您的冲突可能来自您的修改,导致 Drupal 或 CiviCRM 在 Bootstrap 的不同点加载其 jQuery 库,或者使其尝试多次加载 jQuery。这将使将 $ 转换为 cj 的操作在实例化之后而不是之前获取 Drupal jQuery 对象,从而使 Drupal 和/或 CiviCRM 没有需要附加到 $ 对象的库(您是否使用 # 而不是$?).
在相关页面及其 JavaScript 包含的所有地方搜索所有使用 noConflict() 的代码。你应该只在一个地方找到它。与 demo.civicrm.org 页面进行比较以查看不同之处,您可能会在某处找到一个额外的页面。修复它的最大希望是调整自定义模块在 Drupal 系统表中的加载顺序,或者将第二个 noConflict() 调用设置为在没有 cj 对象的情况下有条件地运行。
关于javascript - Drupal CiviCRM Javascript 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271831/