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

如何解决控制台Uncaught ReferenceError: liferay is not defined报错

问题描述

运行代码时控制台抛出Uncaught ReferenceError: liferay is not defined错误,相关截图如下:
截图1
涉及代码片段:

Liferay.on("endNavigate", (function(e) {
    dropdownMegaMenu(),
    secondaryNavMobile()
}
)),


Liferay.on("endNavigate", (function(e) {
    $(".banner-prompt-display").length && $(".banner-prompt").delay(2e3).slideDown("slow", (function() {}
    ))
}
));

截图2

报错原因

全局Liferay对象在代码执行时未完成初始化,或是当前运行环境未正确引入Liferay前端核心依赖。

解决方案
  • 方案1:添加对象存在性防御判断
    给代码加一层判断,只有Liferay对象存在时才执行对应逻辑,避免直接调用抛出错误,示例代码如下:
if (window.Liferay) {
  Liferay.on("endNavigate", (function(e) {
      dropdownMegaMenu(),
      secondaryNavMobile()
  }));

  Liferay.on("endNavigate", (function(e) {
      $(".banner-prompt-display").length && $(".banner-prompt").delay(2e3).slideDown("slow", (function() {}
      ))
  }));
}
  • 方案2:调整代码执行时机
    不要把这段代码放在页面<head>中加载,移动到页面底部位置执行,确保Liferay核心资源先加载完成再运行自定义脚本。如果是在Liferay主题或Portlet中开发,也可以将代码包裹在Liferay官方提供的就绪回调中:
Liferay.on('ready', function() {
  // 把你原来的Liferay相关逻辑放在这里执行
  Liferay.on("endNavigate", (function(e) {
      dropdownMegaMenu(),
      secondaryNavMobile()
  }));

  Liferay.on("endNavigate", (function(e) {
      $(".banner-prompt-display").length && $(".banner-prompt").delay(2e3).slideDown("slow", (function() {}
      ))
  }));
});
  • 方案3:检查运行环境和依赖
    确认当前页面是运行在Liferay门户环境中,如果你是在本地独立调试页面、没有部署到Liferay站点下,必然无法获取全局Liferay对象。如果已经部署在Liferay中,检查当前主题是否正确引入了Liferay前端核心JS资源,没有缺失依赖。

内容的提问来源于stack exchange,提问作者Nazmul Hossain Pappu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:45:02