【问题标题】:liferay 7 - Mismatched anonymous define()liferay 7 - 不匹配的匿名定义()
【发布时间】:2017-08-21 04:51:13
【问题描述】:

我正在尝试将 sockjs (v1.1.2) 包含在我的 liferay 7 portlet 中,但我收到了以下警告:

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

然后库没有加载。

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

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

我不知道如何让它工作

【问题讨论】:

    标签: liferay liferay-aui liferay-7


    【解决方案1】:

    您似乎遇到了LPS-68298 已解决的问题。如果您使用 Liferay 7.0 DXP SP2+ 或 Liferay 7.0 CE GA4+,您只需打开管理侧边栏并选择 控制面板 > 配置 > 系统设置 > Foundation > JavaScript 加载器 > 取消选中 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 加载程序加载文件。

    【讨论】:

    • 我通过禁用和重新启用 AMD 加载程序解决了问题。
    • 使用 Liferay 7 CE GA4 上的控制面板提示解决。谢谢。
    • 你无数次救了我的命,我老是忘记这个把戏!
    【解决方案2】:

    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>
    

    【讨论】:

      猜你喜欢
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 2015-04-03
      • 2013-02-28
      • 1970-01-01
      • 2014-07-10
      相关资源
      最近更新 更多