更改括号 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 setup
和 grunt 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 Preview
和 eslint
不工作。
我尝试插入 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")
.
恭喜!您已经构建了新支架。
我正在尝试使用 Brackets shell 构建应用程序。更具体地说,我正在尝试为一个项目构建一个自定义代码编辑器,所以我不是从头开始,而是在修改 Brackets。
到目前为止,我已经能够解决所有问题,直到我到达括号 Shell。我希望能够在括号旁边安装我的应用程序,因此它必须具有不同的名称和单独的首选项。我按照 this guide 了解如何重命名 Brackets Shell 应用程序。以下是我更改的文件:
Gruntfile.js – 更改构建名称
appshell/config.h – 更改 windows 和 osx 的应用名称
appshell_config.gypi – 同时更改应用名称
在 运行 grunt setup
和 grunt 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 Preview
和 eslint
不工作。
我尝试插入 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")
.
恭喜!您已经构建了新支架。