更改括号 Shell 名称导致 WebSocket 连接错误

Changing Brackets Shell Name results in WebSocket connection Error

我正在尝试使用 Brackets shell 构建应用程序。更具体地说,我正在尝试为一个项目构建一个自定义代码编辑器,所以我不是从头开始,而是在修改 Brackets。

到目前为止,我已经能够解决所有问题,直到我到达括号 Shell。我希望能够在括号旁边安装我的应用程序,因此它必须具有不同的名称和单独的首选项。我按照 this guide 了解如何重命名 Brackets Shell 应用程序。以下是我更改的文件:

Gruntfile.js – 更改构建名称

appshell/config.h – 更改 windows 和 osx 的应用名称

appshell_config.gypi – 同时更改应用名称

在 运行 grunt setupgrunt build-mac 之后我的应用程序启动并且似乎工作正常。我可以在不影响原始 Brackets 应用程序的情况下更改我的应用程序中的首选项(因为它们具有不同的 Application Support 目录)。我没有注意到任何问题,直到我打开看到以下错误的控制台:

WebSocket connection to 'ws://localhost:50642/' failed: HTTP Authentication failed;
no valid credentials available NodeConnection.js:84

所以我尝试在所有三个文件中将我的应用程序名称改回 Brackets,然后问题就消失了。我的猜测是在代码中的某处,该应用程序仍在尝试连接到名为 Brackets 的原始应用程序。我猜我需要更改第 4 个配置文件,但我对 Brackets 不够熟悉,无法找到该文件。没有连接 Live Previeweslint 不工作。

我尝试插入 console.trace 以尝试反向工程节点连接如何在括号 Shell 和括号源代码本身之间工作,但这并没有多大帮助。有谁知道如何在运行时不破坏 NodeConnection 的情况下更改 Brackets Sheel 的名称?

我也尝试在端口 50642 上搜索进程,服务器是 运行。

您需要修改Node Core

Brackets Shell 被硬连线拒绝任何不是来自名为 Brackets 的应用程序的呼叫。打开文件 brackets/appshell/node-core/Server.js。在回答这个问题时,您需要更改第 205 行。以防万一将来有所不同,您可以找到我正在查看的提交 here.

这是导致问题的原因:

wsServer = new WebSocket.Server({
    server: httpServer,
    verifyClient : function (info, callback) {
        // Accept connections originated from local system only
        // Also do a loose check on user-agent to accept connection only from Brackets CEF shell
        if (info.origin === "file://" && info.req.headers["user-agent"].indexOf(" Brackets") !== -1) {
            callback(true);
        } else {
            // Reject the connection
            callback(false);
        }
    }
});

问题是info.req.headers["user-agent"].indexOf(" Brackets")。如您所见,它拒绝任何不是来自 Brackets 的连接。将括号重命名为您的应用程序的名称。

确保名称格式正确

如果您的应用程序中有 space(例如 New Brackets),那么您需要在检查 user-agent 时删除 space。在此示例中,您将检查 user-agent 是否像这样:info.req.headers["user-agent"].indexOf(" NewBrackets").

恭喜!您已经构建了新支架。