开启区块缓存时出现$.cookie is not a function错误求助
我之前碰到过好几个Drupal 7用户遇到这个问题,核心症结就是区块缓存搞的鬼——它把webform依赖的jQuery Cookie插件给“漏掉”加载了,导致form.js执行到调用$.cookie的代码时直接报错。结合你缩小到区块中webform的排查结果,给你几个针对性的解决步骤:
1. 先验证缓存与依赖的关联
先临时把出问题的区块缓存设置改成**“不缓存”**(在区块编辑页面的“缓存设置”里调整),然后清除全站缓存刷新页面。如果错误消失,那百分百是缓存没正确处理JS依赖导致的。
2. 强制确保jQuery Cookie插件优先加载
Drupal 7的form.js依赖jQuery Cookie插件来处理表单临时数据存储,但缓存机制可能没识别到webform区块对这个插件的依赖。你可以通过自定义模块的hook_js_alter()来强制调整加载顺序:
function YOUR_CUSTOM_MODULE_js_alter(&$js) { // 替换成你实际的jQuery Cookie插件路径 $cookie_js_path = 'sites/all/libraries/jquery.cookie/jquery.cookie.js'; if (isset($js['misc/form.js']) && isset($js[$cookie_js_path])) { // 让cookie插件比form.js先加载(权重值越小越先加载) $js[$cookie_js_path]['weight'] = -10; $js['misc/form.js']['weight'] = -9; } }
写完代码后别忘了启用自定义模块,再清一遍缓存。
3. 调整区块缓存策略
如果不想完全禁用区块缓存,可以试试把缓存策略改成**“基于用户角色缓存”或者“基于上下文缓存”**,这样Drupal会根据不同用户的上下文加载对应的资源,减少依赖丢失的概率。
4. 检查webform与模块版本
确保你的webform模块是Drupal 7兼容的最新稳定版本,有些旧版本的webform在区块缓存场景下确实存在依赖处理的bug。另外,检查jQuery Cookie插件的版本是否和Drupal 7的jQuery 1.7.2兼容(建议用1.4.x版本的jquery.cookie,兼容性最好)。
最后必做:清除所有缓存
不管你改了哪项设置,一定要去Drupal后台的“性能”页面,点击“清除所有缓存”,包括页面缓存、区块缓存、JS/CSS聚合缓存,避免旧的缓存文件干扰新的配置。
内容的提问来源于stack exchange,提问作者Duarte Garin

