Xpages 加载javascript库而不返回对象

Xpages 加载javascript库而不返回对象,xpages,Xpages,我正在尝试在XPages中加载javascript库 通常在HTML中,引用如下所示: <html> <head> <script src="https://hammerjs.github.io/dist/hammer.js"></script> </head> <body> </body> </html> 这给了我一个DOM中的Hammer对象,我可以进一步使用它 在XPages中,我进行了以

我正在尝试在XPages中加载javascript库

通常在HTML中,引用如下所示:

<html>
<head>
<script src="https://hammerjs.github.io/dist/hammer.js"></script>
</head>
<body>
</body>
</html>

这给了我一个DOM中的Hammer对象,我可以进一步使用它

在XPages中,我进行了以下设置:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" disableTheme="true"
    dojoForm="false" dojoTheme="false" dojoParseOnLoad="false"
    createForm="false">
    <xp:this.resources>
        <xp:script src="https://hammerjs.github.io/dist/hammer.js"
            clientSide="true">
        </xp:script>
    </xp:this.resources>
</xp:view>

或者:

<?xml version="1.0" encoding="UTF-8" ?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" disableTheme="true" dojoForm="false" dojoTheme="false" dojoParseOnLoad="false" createForm="false">
    <xp:this.resources>
        <xp:headTag tagName="script">
            <xp:this.attributes>
                <xp:parameter name="script" value="text/javascript" />
                <xp:parameter name="src" value="https://hammerjs.github.io/dist/hammer.js" />
            </xp:this.attributes>
        </xp:headTag>
    </xp:this.resources>
</xp:view>

但是Hammer对象不在DOM中


我做错了什么?

一些事情没有特别的顺序:

  • 您可以使用Chrome开发工具测试脚本是否已加载,然后转到控制台。然后,您可以将脚本放入以调用hammer代码。如果未加载脚本,则会出现错误。您的脚本可能已加载

  • 使用Hammer js站点验证您是否正确加载了脚本

  • 尝试将代码放入仅加载客户端代码的
    onClientLoad
    事件中

  • 将Hammer.js代码放入NSF中,以确保与github的连接没有问题。使用PackageExplorer并将文件放入WebContent/js文件夹。将任何CSS放入WebContent/CSS文件夹


    • hammer.js使用AMD。下面是使用AMD的hammer.js源代码的一个片段:

      if (typeof define == TYPE_FUNCTION && define.amd) {
          define(function() {
              return Hammer;
          });
      } else if (typeof module != 'undefined' && module.exports) {
          module.exports = Hammer;
      } else {
          window[exportName] = Hammer;
      }
      
      不幸的是,AMD加载与XPages中的Dojo冲突。看

      在您的情况下,您需要下载hammer.js,更改AMD加载部分,将其添加到nsf,然后从nsf加载脚本

      您可以通过将hammer.js中的代码更改为以下内容来删除AMD加载部件:

      //if (typeof define == TYPE_FUNCTION && define.amd) {
      //    define(function() {
      //        return Hammer;
      //    });
      //} else if (typeof module != 'undefined' && module.exports) {
      if (typeof module != 'undefined' && module.exports) {
          module.exports = Hammer;
      } else {
          window[exportName] = Hammer;
      }
      

      另一种处理方法是使用AMD加载程序,它是Dojo在较新版本Domino上的一部分

      这段代码实现了hammer.js文档中的基本示例(我只对ready函数使用jQuery):

      然后只需将代码添加到脚本标记中的xpage:

      <?xml version="1.0" encoding="UTF-8"?>
      <xp:view xmlns:xp="http://www.ibm.com/xsp/core">
          <xp:this.resources>
              <xp:styleSheet href="./css/basicImpl.css"></xp:styleSheet>
              <xp:script src="./js/basicImpl.js" clientSide="true"></xp:script>
          </xp:this.resources>
          <div id="myElement"></div>
      </xp:view>
      

      从第一眼看,您正在做的只是加载库。然后你需要脚本来调用它。事实上,我下面的答案是不正确的。我将删除它,即使不在脚本中调用它,您仍然可以在浏览器控制台中手动调用它。hammer.js使用AMD,因此与Dojo冲突。关于如何从hammer.js中删除AMD加载,请参见以下答案:例如,我设置了:但是我得到了消息ReferenceError:hammer未定义var mc=new hammer(myElement);onClient事件不是针对XSP的吗?它是针对客户端脚本的,我想删除我的答案,当我按下delete键时,它会询问我是否想删除帖子,当然我不想这样做。但是你的脚本块应该做同样的事。hammer.js使用AMD,因此与Dojo冲突,请参阅Hi Per,听起来你以前也遇到过类似的问题。你的方法很有魅力。非常感谢。
      <?xml version="1.0" encoding="UTF-8"?>
      <xp:view xmlns:xp="http://www.ibm.com/xsp/core">
          <xp:this.resources>
              <xp:styleSheet href="./css/basicImpl.css"></xp:styleSheet>
              <xp:script src="./js/basicImpl.js" clientSide="true"></xp:script>
          </xp:this.resources>
          <div id="myElement"></div>
      </xp:view>
      
      #myElement {
          background: silver;
          height: 300px;
          text-align: center;
          font: 30px/300px Helvetica, Arial, sans-serif;
      }