You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 7聚合JS文件后浏览器提示Ckeditor未定义问题咨询

Drupal 7开启JS/CSS聚合后编辑角色CKeditor未定义问题排查

问题诱因

  • 权限关联的JS聚合规则差异:Drupal 7的JS聚合逻辑会根据当前访问用户的角色、权限匹配可加载的JS资源列表,再生成对应的聚合文件。如果CKeditor核心JS、依赖插件的加载逻辑绑定了仅限高权限角色的权限判断,或者编辑角色缺失access ckeditor、对应文本格式的使用权限,编辑角色的JS资源列表就会缺失CKeditor相关代码,聚合后自然找不到全局变量。
  • 聚合生成时序问题:如果站点开启了页面缓存、JS预聚合功能,优先用匿名用户/低权限角色的资源列表预生成了编辑页的聚合包,后续编辑角色访问时直接调用了没有CKeditor代码的旧聚合包,也会触发报错。
  • 聚合路径过滤bug:老旧版本的Drupal 7核心、CKeditor模块存在聚合路径过滤bug,会把sites/all/libraries下的CKeditor原生JS文件误判为非站点资源,过滤出聚合列表,仅当管理员访问时触发了模块的强制加载逻辑才会引入,低权限角色访问时就被过滤掉。

解决方法

前置校验

先临时关闭JS聚合功能,确认编辑角色可以正常使用CKeditor,排除权限本身配置错误的问题。

正式修复方案

  • 校验基础权限配置:登录后台进入「人员」-「权限」页面,确认编辑角色已经勾选以下权限:
    • 访问CKeditor(CKeditor模块的基础访问权限)
    • 站点正在使用的富文本格式(如Full HTML、Filtered HTML)对应的使用XXX文本格式权限
      保存权限后清空所有缓存再测试。
  • 强制CKeditor JS全局加载:如果权限配置正常,可以在主题的template.php文件中添加钩子,强制所有有权限使用富文本的角色加载CKeditor核心JS,避免聚合时被过滤:
    function YOUR_THEME_NAME_preprocess_page(&$variables) {
      // 仅对有权限访问CKeditor的用户加载核心JS
      if (user_access('access ckeditor')) {
        drupal_add_js(libraries_get_path('ckeditor') . '/ckeditor.js', array(
          'weight' => -100,
          'preprocess' => TRUE
        ));
      }
    }
    
    将代码中的YOUR_THEME_NAME替换为站点当前使用主题的机器名,保存后清空所有缓存、重新生成聚合文件即可。
  • 修复聚合路径过滤问题:如果使用的是老旧版本的核心或CKeditor模块,优先升级到Drupal 7核心最新稳定版、CKeditor模块最新7.x版本,升级后清空所有缓存重新生成聚合文件。
  • 排除第三方聚合模块冲突:如果使用了AdvAgg等第三方聚合模块,先关闭JS预生成功能,用编辑角色账号访问一次编辑页触发聚合文件重新生成后再开启,也可以直接在聚合模块配置中把CKeditor的JS路径加入强制聚合白名单。

内容的提问来源于stack exchange,提问作者Rajkumar Dasgupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 06:36:00