如何在Google Chrome中临时禁用WebSocket?

60

我想临时禁用Google Chrome中的WebSocket来调试JavaScript代码,以确保其在不支持WebSocket的任何浏览器上都能正常工作。

4个回答

22

首先,我想说,在没有WebSocket的环境下测试JavaScript有更好的机制。例如,您可以在不支持此协议的IE9中运行JavaScript。如果您更喜欢Firefox 4,则它们目前也被禁用。

假设您有充分的理由需要在没有WebSocket的Chromium中进行测试,那么我认为您没什么办法了。在Chromium中,没有一个简单的机制来禁用WebSockets。它不是内置为命令行开关,也没有可配置标志。由于本地没有使这种情况发生的机制,我不建议花时间测试该场景。您用户使用的每个Chromium版本(例如9+)都启用了WebSocket。

尽管如此,如果您确实需要禁用WebSockets,最接近您可以得到的方式是在测试代码中删除相关变量:

WebSocket = undefined;

这可能相对于蛮力法,但应该有效。你甚至可以创建一个扩展程序将该JavaScript注入到你访问的每个页面中,以获得真正没有WebSocket的体验(假设这在你的使用情况下有价值)。


19
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-web-sockets - LostInQuery
24
支持 WebSocket 和 WebSocket 能够“正常工作”是不同的概念。浏览器支持 WebSocket 但可能会回退到其他传输方式,原因有很多。想要在 Chromium 上测试这种情况并非无用功。 - darma
4
关于 Windows 上 Chrome 61 的 FYI:在 http://demos.kaazing.com/echo/ 进行测试时,--disable-web-sockets 参数无效。请留意。 - bbodenmiller

13

使用 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头被阻止。


13

在看到@user3661841在另一个问题的答案后,我创建了一个GreaseMonkey/TamperMonkey脚本,可以以类似的方式禁用WebSockets。

以下是基于Chromium的浏览器(Chrome、Brave、Sidekick等)的说明:

  1. 从Chrome商店下载TamperMonkey扩展程序
  2. 从GreasyFork安装此脚本。默认情况下,安装此脚本将禁用您访问的每个网站上的WebSockets。如果您不想立即阻止WebSockets,请单击TamperMonkey图标和切换开关以禁用阻止。
  3. 当您想要关闭WebSockets时,请单击TamperMonkey图标和切换开关以启用阻止。刷新页面。
  4. 不再需要阻止WebSockets时,请禁用该脚本。

以下是您要单击以禁用/启用WebSocket阻止的开关:

enter image description here

注意1:您应该能够在控制台中看到输出,标记WebSocket连接尝试被打开,但被阻止。

注意2:确保在禁用WebSockets进行开发时将其禁用。如果您仅使用TamperMonkey禁用WebSockets,则大部分时间都希望您的TamperMonkey看起来像这样:

Tamper Monkey when not testing

当您想要阻止时,看起来像这样:

Tamper Monkey when testing


它可以工作,但是我需要在连接后禁用WS。 - undefined

4
要禁用 WebSocket,您可以在 Chrome 开发工具中添加 "请求阻止",但只有在特定文件启动 WebSocket 时才能防止其加载。如果您无法执行此操作,则此解决方案可能无效。

enter image description here

例如: https://www.websocket.org/echo.html 通过echo.js来初始化WebSocket连接,因此您可以防止该文件加载,WebSocket就永远不会启动。

enter image description here

发起者文件可以在网络选项卡中找到 在此输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接