【问题标题】:Chrome inspector console does not work with version 54.0.2840.99Chrome 检查器控制台不适用于版本 54.0.2840.99
【发布时间】:2017-03-26 13:04:39
【问题描述】:

我使用 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 版本的缺陷吗?如何解决问题? 我捕获的图片如下:

【问题讨论】:

  • 如您所见,crbug.com/661613 是 WontFix,因此要说服开发人员,您需要通过providing a bisect log 证明是他们的错,才能确定原因。或者直接安装 Chrome 的工作版本。
  • 我看到了那个错误。我不敢相信它被标记为 WontFix。以前版本的 Chrome 54 一切正常。这不是 Chrome 54 的回归吗?我不敢相信。
  • Chrome 中的协议会随着时间而改变。如问题中所述,使用 node-inspector 提交错误报告,因为它不是 Chrome 问题。最近 Chrome 团队一直在做原生 Node 调试。可能值得检查一下这项工作,看看它是否适合你。
  • 软件开发是否需要考虑向后兼容?
  • 我了解 Chrome 中的更改可能是合理的。但是软件开发需要考虑向后兼容吗?一旦产品发布给用户,就避免回归。我正在使用 CEF 31.0.1650.57。在更新到 Chrome 54 之前,它一直运行良好。有时,为大型产品更新 CEF 组件的成本很高。有什么方法可以在不更新 CEF 组件的情况下解决此问题?我还发现 node-inspector 与 Chrome 54 有同样的问题,只是以 node-inspector 为例。

标签: javascript node.js google-chrome google-chrome-devtools node-inspector


【解决方案1】:

按照trojanliu 的建议here 的解决方法是编辑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;
}

【讨论】:

  • 谢谢。此解决方法应该适用于节点检查器。老 cef 的解决方法呢?
  • 这只会修复回车键。它不会修复制表符完成、箭头键等。请参阅其他答案以获取处理所有这些情况的修复。
【解决方案2】:

这是由 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() 是不够的,上面的代码可以解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2015-09-13
    • 2019-05-28
    相关资源
    最近更新 更多