ueditor在使用严格模式时报错Uncaught TypeError: 'caller', 'callee', and 'arguments'

字号+ 编辑: 种花家 修订: 种花家 来源: 原创 2023-09-10 我要说两句(4)

最近在调试electron桌面程序的时候发觉百度ueditor的prototype(原型)方法当中报错Uncaught TypeError: 'caller', 'callee', and 'arguments', 无法轻易取消electron严格模式约束, 那么如何解决这个问题呢?

这里只是拿实际应用遇到的问题当个例子, 百度ueditor植入electron遇到了很多坑, 这是其中的一个。由于使用了严格模式,ueditor一些语法会无法通过, 只能通过修改写法来解决问题。

如果直接看ueditor.all.min.js是没法阅读的, 这里我们打开ueditor.all.js来看其中一行代码:

if (editor.options.wordCount) {
    function countFn() {
        setCount(editor,me);
        domUtils.un(editor.document, "click", arguments.callee);
    }
    domUtils.on(editor.document, "click", countFn);
    editor.ui.getDom('wordcount').innerHTML = editor.getLang("wordCountTip");
}

报错的代码就是arguments.callee这部分, 原因是全局采用了use strict也就是严格模式, js官方说arguments.callee的代价太高, 故而在今后的语法层面上抛弃了这种写法, 总之既然要用到js的功能特性, 只好顺着人家的想法来, 好了废话不多说, 我们找到上文不远处的一行代码, 查看到这堆代码是一个闭包内生存的东西, 原文如下:

    editor.addListener('ready', function () {

那么只需要把这个匿名闭包函数随便起一个名字, 例如WK, 就像这样:

    editor.addListener('ready', function WK() {

ok, 接下来再在对应的位置改掉arguments.callee就可以了:

if (editor.options.wordCount) {
    function LOOKATME() {
        setCount(editor,me);
        domUtils.un(editor.document, "click", WK);
    }
    domUtils.on(editor.document, "click", LOOKATME);
    editor.ui.getDom('wordcount').innerHTML = editor.getLang("wordCountTip");
}

收工。

注意, 在修改时候,要仔细看上下文,找到上一级的匿名闭包函数, 而不是随便乱找一个起个名对上就行了。

阅完此文,您的感想如何?
  • 有用

    11

  • 没用

    8

  • 开心

    10

  • 愤怒

    6

  • 可怜

    5

1.如文章侵犯了您的版权,请发邮件通知本站,该文章将在24小时内删除;
2.本站标注原创的文章,转发时烦请注明来源;
3.Q群: 2702237 13835667

相关课文
  • JS如何防止父节点的事件运行

  • nodejs编写一个简单的http请求客户端代码demo

  • 使用Sublime Text3 开发React-Native的配置

  • 说一则为什么后端开发人员不选择node.js的原因

我要说说
网上宾友点评
1 楼 IP 113.209.***.224 的嘉宾 说道 : 1544066898
你上一个函数写wk, 下一个功能就得写wk, 怎么写成Fn了?

2 楼 IP 113.209.***.224 的嘉宾 说道 : 1544067300
能改一下吗

3 楼 IP 106.50.***.2 的嘉宾 说道 : 1552567691
垃圾百度也不更新了

4 楼 IP 121.69.***.254 的嘉宾 说道 : 1569394396
好使