【问题标题】:How can i temporarily disable websocket in Google Chrome?如何在 Google Chrome 中暂时禁用 websocket?
【发布时间】:2011-08-02 12:00:14
【问题描述】:

我想暂时禁用 Google Chrome 中的 websocket 以调试 javascript,以确保它适用于任何不支持 websocket 的浏览器。

【问题讨论】:

    标签: google-chrome websocket


    【解决方案1】:

    首先,我想说有更好的机制可以在 websocketless 环境中测试您的 JavaScript。例如,您可以在 IE9 中运行您的 JavaScript,它没有实现该协议。如果这更符合您的风格,它们目前在 Firefox 4 中仍处于禁用状态。

    假设您有充分的理由需要在无 websocket 的 Chromium 中进行测试,我认为您不走运。在 Chromium 中禁用 WebSockets 并不是一个简单的机制。它不是作为命令行开关内置的,也没有可配置的标志。由于没有机制可以在本地实现这一点,因此我不建议花时间测试场景。您的用户使用的每个 Chromium 版本(例如 9+)都启用了 websocket。

    话虽如此,如果你真的需要禁用 websockets,你可以在不重新编译浏览器的情况下获得最接近的方法是在测试代码中删除相关变量:

    WebSocket = undefined;
    

    相对蛮力,但应该可以。您甚至可以创建一个扩展,将该 JavaScript 注入您访问的每个页面,以获得真正的无 websocket 体验(再次假设这对您的用例有某种价值)。

    【讨论】:

    • /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-web-sockets
    • “支持”websockets 和让它们“工作”不是一回事。支持 ws 的浏览器会退回到另一个传输有多种原因。想要在 Chromium 上测试这种情况并非没有用。
    • 在 Chrome 61 for Windows --disable-web-sockets 上使用 demos.kaazing.com/echo 测试时仅供参考
    【解决方案2】:

    我能够使用Fiddler 阻止 WebSockets。

    转到 Fiddler 菜单中的规则/自定义规则...

    将此代码添加到类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。打开时,应根据 Connection: Upgrade 标头阻止 ws 连接。

    【讨论】:

      【解决方案3】:

      要禁用 ws,您可以简单地在 chrome 开发工具中添加“请求阻止”,但前提是特定文件正在启动 websocket 以防止它加载,如果您不能这样做,此解决方案可能不起作用

      例如: https://www.websocket.org/echo.html

      websocket 连接是由 echo.js 发起的,所以你可以防止该文件被加载,websocket 永远不会启动。

      启动器文件可以在网络选项卡中找到

      【讨论】:

        【解决方案4】:

        在看到@user3661841 的answer on another question 之后,我创建了一个GreaseMonkey/TamperMonkey 脚本,它允许您以类似的方式禁用WebSockets。

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

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

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

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

        注意 2:确保在为开发禁用 WebSockets 后禁用此功能。如果你只使用 TamperMonkey 来禁用 WebSockets,你会希望你的 TamperMonkey 大多数时候看起来像这样:

        当你想阻止时像这样:

        【讨论】:

          猜你喜欢
          • 2014-02-28
          • 2023-03-04
          • 1970-01-01
          • 1970-01-01
          • 2011-08-10
          • 2016-12-08
          • 2011-01-21
          • 2011-07-03
          相关资源
          最近更新 更多