Chrome 检查器控制台不适用于版本 54.0.2840.99

Chrome inspector console does not work with version 54.0.2840.99

我使用 node-inspector 调试 Chrome 版本 54.0.2840.99 的 JS。 我在一个 windows cmd 控制台中输入 "node-inspector",在另一个 windows cmd 控制台中输入 "node --debug-brk l:\dev\debug\test.js"。在 Chrome 中打开 "http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858"。它能够像往常一样调试。但是我在Chrome控制台输入"1 + 2",按"Enter",没有任何反应。我希望 "3" 输出到 Chrome 控制台。它确实适用于 Chrome 版本 48.0.2564.116。我没有测试其他 Chrome 版本。

这是新 Chrome 版本的缺陷吗?如何解决问题? 我拍摄的照片如下:

根据建议 here, by trojanliu 的解决方法是编辑 DOMExtension.js 文件,更改 isEnterKey() 函数...

vi /usr/local/lib/node_modules/node-inspector/front-end/platform/DOMExtension.js 
/isEnterKey

... 检查 keyCode === 13:

function isEnterKey(event) {
  //suit for event.keyIdentifier
  return (event.keyCode !== 229 && event.keyIdentifier === "Enter") || event.keyCode === 13;
}

这是由于 Chrome 弃用 KeyboardEvent.keyIdentifier

解决方法是将 keyIdentifier 添加回 KeyboardEvent 原型。

我还注意到 KeyboardEvent.key 字符串值与 KeyboardEvent.keyIdentifier 中的字符串值不同,因此我在下面展示了如何在需要时处理这些差异。

Object.defineProperty(KeyboardEvent.prototype, 'keyIdentifier', {
    get: function() {
        switch (this.key) {
            case "ArrowDown":
                return "Down";
                break;
            case "ArrowLeft":
                return "Left";
                break;
            case "ArrowRight":
                return "Right";
                break;
            case "ArrowUp":
                return "Up";
                break;
            case "Tab":
                return "U+0009";
                break;
            case "Escape":
                return "U+001B";
                break;
            default:
                return this.key;
        } 
    }
});

仅替换 isEnterKey() 是不够的,上面的代码可以解决这个问题。