我的 IBM Domino xPages 应用程序中的 dojo.js 导致某些 JS 库无法工作

Posted

技术标签:

【中文标题】我的 IBM Domino xPages 应用程序中的 dojo.js 导致某些 JS 库无法工作【英文标题】:dojo.js in my IBM Domino xPages app causes certain JS libraries not working 【发布时间】:2013-06-25 17:29:50 【问题描述】:

dojo.js 在我的 xPages 应用程序中导致某些 JS 库无法在页面上运行......我们使用 JQuery,它在 dojo 上运行良好,但例如当 dojo.js 可用时,jquery.cookie.js (https://github.com/carhartl/jquery-cookie) 不起作用。 URI.js 库 (http://medialize.github.io/URI.js/) 也是如此……当 dojo.js 在页面上运行时,它不起作用。为了调试,我创建了一个简单的页面(不是 xpage,因为 xpage 包含 dojo),当 dojo.js 可用时,这些库不起作用。删除 dojo 库会导致这些库按预期工作。

环境:Domino 9 服务器意味着 Dojo Toolkit 1.8.1

对此有任何想法/经验吗?

【问题讨论】:

【参考方案1】:

我没有使用其他 jQuery 库的经验,只有 jQuery Mobile 和 Dojo 1.8,但问题可能是相同的,并且是由 Dojo 的 AMD 加载程序引起的。尝试在任何 Dojo 库之前加载 jQuery 内容。这解决了我的问题。

更多详情请看这里:http://hasselba.ch/blog/?p=1216

【讨论】:

是的,这(在 dojo 之前加载)在我试验时会有所帮助。但是我如何在 xpage 上做到这一点? ... 因为到 dojo 的链接是自动生成的,并放在页面源代码的顶部。如果我可以禁用它并手动加载它,这将需要以某种方式在不同的服务器上维护正确的 dojo 版本:-( 有什么想法吗? 请检查我的答案中的链接。您必须在 xp:headTags 中添加 jQuery 库并为 XPage 启用资源聚合。 谢谢,我按照你的帖子做了。只是为了避免完全聚合,这会导致一些其他问题,特别是对于 CSS 和图像链接,我在 XspProperties = xsp.resources.aggregate=true , xsp.resources.aggregate.appjs=false, xsp.resources.aggregate 中使用了它.appcss=false 。现在它工作正常......我的 JQuery 库是在 Dojo 之前加载的。希望 IBM 不会改变他们生成 html 的方式:-)。再次感谢斯文! 结束方式是使用 jquery 作为 dojo 模块,请参阅我的回复。 我注意到你的回复 Egor,但我对其他库也有问题,例如URI.js 库 (medialize.github.io/URI.js)【参考方案2】:

有关同时使用 jQuery 和 Dojo 的提示,请参阅 https://www.ibm.com/developerworks/community/blogs/94e7fded-7162-445e-8ceb-97a2140866a9/entry/loading_jquery_with_dojo_1_7_amd_loader2?lang=en

对于 xPage: 添加到 XSP 属性:

xsp.client.script.dojo.djConfig=async:true

创建一个包含以下内容的脚本库:

define.amd.jQuery = true;

并将其作为资源添加到您的 xPage。

下面是xPage代码:

<xp:this.properties>
        <xp:parameter name="xsp.client.script.dojo.djConfig" value="packages: exPackages" />
    </xp:this.properties>
    <xp:this.beforePageLoad>
    <![CDATA[#javascript:
        var exCon = facesContext.getExternalContext();
        var response = exCon.getResponse();
        var writer = response.getWriter();
        writer.write("<script>\n");
        writer.write("var exPackages=[name:'jquery',location:'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1',main:'jquery']\n");
        writer.write("</script>\n");
        ]]>
    </xp:this.beforePageLoad>
    <xp:this.resources>
        <xp:script src="/jquery.js" clientSide="true"></xp:script>
        <xp:dojoModule name="jquery"></xp:dojoModule>
    </xp:this.resources><p id="test">Egor Margineanu</p>
<xp:button value="Label" id="button1">
    <xp:eventHandler event="onclick" submit="false">
        <xp:this.script><![CDATA[alert($("#test").text());]]></xp:this.script>
    </xp:eventHandler></xp:button>

【讨论】:

你不能用 async:true 设置 djConfig。这行不通。如果您在 XPage 上设置了参数,则 xsp.properties 中的设置将被忽略。 Hmm... 如果您将解决方案限制为仅在 beforePageLoad(没有 AMD 部分)中为 jQuery 编写脚本标记,您将得到完全相同的结果(但请记住:这是没有更多有效的 HTML)。然后时间问题就解决了。 是的,这并不是一个真正美丽的方式。我担心的是 xPages 引擎不允许定义 2 个或更多具有相同名称的属性。我也没有找到如何以某种方式计算这些的方法。

以上是关于我的 IBM Domino xPages 应用程序中的 dojo.js 导致某些 JS 库无法工作的主要内容,如果未能解决你的问题,请参考以下文章

具有 Kerberos 身份验证和 XPages 的 Lotus Domino 服务器

如何在 XPages Domino 9 预览版中直接引用 Dojo 1.8 文件?

Xpages - 新版本的CkEditor无法加载

Lotus domino 都用啥编程语言啊?

使容器在 xpages 中可移动

Domino数据源