liferay 7 - 不匹配的匿名定义()

时间:2017-03-28 08:11:08

标签: liferay liferay-aui liferay-7

我试图在我的liferay 7 portlet中包含sockjs(v1.1.2),但是我收到了这个警告:

Mismatched anonymous define() module: function ()...

然后没有加载库。

我直接将.js文件包含在我的liferay-portlet.xml中,如下所示:

<header-portlet-javascript>/common/js/sockjs.js</header-portlet-javascript>

我不知道如何让它发挥作用

2 个答案:

答案 0 :(得分:7)

您似乎遇到了由LPS-68298修复的问题。如果您使用Liferay 7.0 DXP SP2 +或Liferay 7.0 CE GA4 +,您只需打开管理侧栏并选择控制面板&gt; 配置&gt; 系统设置&gt; 基金会&gt; JavaScript Loader &gt;取消选中 Expose Global 。如果您没有使用上述Liferay版本之一,则需要遵循this answer and disable the AMD loader before loading your script, then re-enable the AMD loader的建议。或者,您可以通过手动编辑JS文件来解决此问题。更改 /common/js/sockjs.js 中的任何文字,如:

typeof define == 'function'

要:

false && typeof define == 'function'

这将阻止文件被Liferay的AMD加载程序加载。

答案 1 :(得分:0)

stiemannkj1是正确的。

但是,如果您不想触摸js库的代码(也许是CDN),也不想更改配置,则可以执行以下操作(如果您担心多个站点和portlet可能会影响此行为)。

<script>
    Liferay.Loader.define._amd = Liferay.Loader.define.amd;
    Liferay.Loader.define.amd = false;
</script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.js"></script>
<script>
    Liferay.Loader.define.amd = Liferay.Loader.define._amd;
</script>

如果此代码不起作用,请尝试使用此代码。

<script>
    define._amd = define.amd;
    define.amd = false;
</script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.js"></script>
<script>
    define.amd = define._amd;
</script>