【ZeroClipboard is not defined】的解决方法

【ZeroClipboard is not defined】的解决方法

时间 2015-11-26 11:34:00 博客园精华区 html

原文  http://www.cnblogs.com/TiestoRay/p/4997195.html编辑器

主题 UEditor ui

项目中一直在使用UEditor,风平浪静。spa

近期该项目引入了Requirejs,结果发如今有富文本编辑器的页面都会在控制台报出以下异常:htm

Uncaught ReferenceError: ZeroClipboard is not defined ueditor.all.min.js:265blog

经查看代码后发现 ueditor.../third-party/zeroclipboard/ZeroClipboard.js中 输出方法的地方是酱紫的ip

if (typeof define === "function" && define.amd) {
    define(function() {
      return ZeroClipboard;
    });
  } else if (typeof module === "object" && module && typeof module.exports === "object" && module.exports) {
    module.exports = ZeroClipboard;
  } else {
    window.ZeroClipboard = ZeroClipboard;
  }

意思就是说get

  • 若是当前页面的模块加载模式是AMD的 则定义模块
  • 若是是CommonJs的,则输出到模块 ZeroClipboard
  • 不然 把  ZeroClipboard 定义为全局变量

这样 解决方案就有两种。源码

①不适用模块加载模式来使用这个功能博客

这样方法须要修改一点源码,把上面这段代码替换成以下代码便可

if (typeof define === "function" && define.amd) {
    define(function() {
      return ZeroClipboard;
    });
  } else if (typeof module === "object" && module && typeof module.exports === "object" && module.exports) {
    module.exports = ZeroClipboard;
  }
  window.ZeroClipboard = ZeroClipboard;

②若是不修改源码,就得在模块加载时作处理了

首先是修改配置

require.config({
    baseUrl: '',
    paths: {
        ZeroClipboard: "./UEditor.../ZeroClipboard"//主要是加这句话
    }
});

而后是在调用这个模块并把模块定义到全局变量

require(['ZeroClipboard'], function (ZeroClipboard) {
    window['ZeroClipboard'] = ZeroClipboard;
});

完工

相关文章
相关标签/搜索