0

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

到目前为止,我已经能够解决所有问题,直到我到达 Brackets Shell。我希望能够在括号旁边安装我的应用程序,因此它必须具有不同的名称和单独的首选项。我按照本指南了解如何重命名 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 不够熟悉,无法找到该文件。没有连接Live Preview并且eslint不工作。

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

我还尝试在端口 50642 上搜索进程并且服务器正在运行。 在此处输入图像描述

4

1 回答 1

0

您需要修改节点核心

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

这是导致问题的原因:

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")。如您所见,它拒绝任何不是来自括号的连接。将括号重命名为您的应用程序所调用的任何名称。

确保正确格式化名称

如果您的应用程序中有一个空格(例如New Brackets),那么您将在检查user-agent. 在此示例中,您将检查是否user-agent像这样:info.req.headers["user-agent"].indexOf(" NewBrackets").

恭喜!你已经建立了新的支架。

在此处输入图像描述

于 2018-08-29T23:52:59.250 回答