我想临时禁用Google Chrome中的WebSocket来调试JavaScript代码,以确保其在不支持WebSocket的任何浏览器上都能正常工作。
我想临时禁用Google Chrome中的WebSocket来调试JavaScript代码,以确保其在不支持WebSocket的任何浏览器上都能正常工作。
首先,我想说,在没有WebSocket的环境下测试JavaScript有更好的机制。例如,您可以在不支持此协议的IE9中运行JavaScript。如果您更喜欢Firefox 4,则它们目前也被禁用。
假设您有充分的理由需要在没有WebSocket的Chromium中进行测试,那么我认为您没什么办法了。在Chromium中,没有一个简单的机制来禁用WebSockets。它不是内置为命令行开关,也没有可配置标志。由于本地没有使这种情况发生的机制,我不建议花时间测试该场景。您用户使用的每个Chromium版本(例如9+)都启用了WebSocket。
尽管如此,如果您确实需要禁用WebSockets,最接近您可以得到的方式是在测试代码中删除相关变量:
WebSocket = undefined;
这可能相对于蛮力法,但应该有效。你甚至可以创建一个扩展程序将该JavaScript注入到你访问的每个页面中,以获得真正没有WebSocket的体验(假设这在你的使用情况下有价值)。
使用 Fiddler 可以阻止 WebSockets。
在 Fiddler 菜单中选择 Rules / Customize Rules...
将以下代码添加到 Handlers 类中(我把它放在现有的 RulesOption 项后面):
// Block Websockets
public static RulesOption("Block Websockets")
BindPref("fiddlerscript.rules.BlockWebsockets")
var m_BlockWebsockets: boolean = false;
在OnBeforeRequest中添加以下代码: if (m_BlockWebsockets && oSession.oRequest.headers.Exists("Connection") && oSession.oRequest["Connection"] == "Upgrade") {
oSession.oRequest.FailSession(502, "Blocked", "Fiddler blocked websocket connection");
return;
}
这将在规则菜单中添加一个阻止Websockets的菜单选项。当它被切换开时,ws连接应该基于Connection: Upgrade头被阻止。
在看到@user3661841在另一个问题的答案后,我创建了一个GreaseMonkey/TamperMonkey脚本,可以以类似的方式禁用WebSockets。
以下是基于Chromium的浏览器(Chrome、Brave、Sidekick等)的说明:
以下是您要单击以禁用/启用WebSocket阻止的开关:
注意1:您应该能够在控制台中看到输出,标记WebSocket连接尝试被打开,但被阻止。
注意2:确保在禁用WebSockets进行开发时将其禁用。如果您仅使用TamperMonkey禁用WebSockets,则大部分时间都希望您的TamperMonkey看起来像这样:
当您想要阻止时,看起来像这样:
--disable-web-sockets
参数无效。请留意。 - bbodenmiller