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.交流群: PHP+JS聊天群

相關課文
  • JS如何防止父節點的事件運行

  • nodejs編寫一個簡單的http請求客戶耑代碼demo

  • 使用Sublime Text3 開發React-Native的配置

  • 說一則爲什麽後耑開發人員不選擇node.js的原因

我要說說
網上賓友點評
1 樓 IP 113.209.128.224 的嘉賓 说道 : 1544066898
你上一个函数写wk, 下一个功能就得写wk, 怎么写成Fn了?

2 樓 IP 113.209.128.224 的嘉賓 说道 : 1544067300
能改一下吗

3 樓 IP 106.50.192.2 的嘉賓 说道 : 1552567691
垃圾百度也不更新了

4 樓 IP 121.69.77.254 的嘉賓 说道 : 1569394396
好使