如何暂时禁用Google Chrome中的websocket?

时间:2011-04-10 13:50:15

标签: google-chrome websocket

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

4 个答案:

答案 0 :(得分:21)

首先,我要说有更好的机制可以在websocketless环境中测试你的JavaScript。例如,你可以在IE9中运行你的JavaScript,它没有实现协议。如果这更像你的风格,它们在Firefox 4中仍然暂时被禁用。

假设有一个很好的理由需要在无网页Chromium中进行测试,我认为你运气不好。在Chromium中禁用WebSockets没有一个简单的机制。它不是作为命令行开关内置的,也没有可配置的标志。由于没有机制让这种情况本身发生,我不建议花时间测试这种情况。您的用户使用的每个Chromium版本(例如9+)都启用了websockets。

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

WebSocket = undefined;

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

答案 1 :(得分:7)

我能够用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 添加到“规则”菜单。启用该功能后,应根据“连接:升级”标头阻止ws连接。

答案 2 :(得分:3)

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

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

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

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

enter image description here

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

注意 2:当您为开发禁用 WebSockets 后,请务必禁用它。如果你只使用 TamperMonkey 来禁用 WebSockets,你会希望你的 TamperMonkey 在大多数情况下看起来像这样:

Tamper Monkey when not testing

当你想阻止时就像这样:

Tamper Monkey when testing

答案 3 :(得分:1)

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

enter image description here

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

Websocket连接是由echo.js发起的,因此可以防止该文件过时并且websocket永远不会启动。

enter image description here

启动器文件可以在“网络”选项卡中找到 enter image description here