【发布时间】:2011-08-02 12:00:14
【问题描述】:
我想暂时禁用 Google Chrome 中的 websocket 以调试 javascript,以确保它适用于任何不支持 websocket 的浏览器。
【问题讨论】:
我想暂时禁用 Google Chrome 中的 websocket 以调试 javascript,以确保它适用于任何不支持 websocket 的浏览器。
【问题讨论】:
首先,我想说有更好的机制可以在 websocketless 环境中测试您的 JavaScript。例如,您可以在 IE9 中运行您的 JavaScript,它没有实现该协议。如果这更符合您的风格,它们目前在 Firefox 4 中仍处于禁用状态。
假设您有充分的理由需要在无 websocket 的 Chromium 中进行测试,我认为您不走运。在 Chromium 中禁用 WebSockets 并不是一个简单的机制。它不是作为命令行开关内置的,也没有可配置的标志。由于没有机制可以在本地实现这一点,因此我不建议花时间测试场景。您的用户使用的每个 Chromium 版本(例如 9+)都启用了 websocket。
话虽如此,如果你真的需要禁用 websockets,你可以在不重新编译浏览器的情况下获得最接近的方法是在测试代码中删除相关变量:
WebSocket = undefined;
相对蛮力,但应该可以。您甚至可以创建一个扩展,将该 JavaScript 注入您访问的每个页面,以获得真正的无 websocket 体验(再次假设这对您的用例有某种价值)。
【讨论】:
--disable-web-sockets 上使用 demos.kaazing.com/echo 测试时仅供参考
我能够使用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 连接。
【讨论】:
要禁用 ws,您可以简单地在 chrome 开发工具中添加“请求阻止”,但前提是特定文件正在启动 websocket 以防止它加载,如果您不能这样做,此解决方案可能不起作用
例如: https://www.websocket.org/echo.html
websocket 连接是由 echo.js 发起的,所以你可以防止该文件被加载,websocket 永远不会启动。
【讨论】:
在看到@user3661841 的answer on another question 之后,我创建了一个GreaseMonkey/TamperMonkey 脚本,它允许您以类似的方式禁用WebSockets。
以下是基于 Chromium 的浏览器(Chrome、Brave、Sidekick 等)的说明:
这是您要单击以禁用/启用 WebSocket 阻塞的开关:
注意 1:您应该能够在控制台中看到输出,表明 WebSocket 连接已尝试打开,但被阻止。
注意 2:确保在为开发禁用 WebSockets 后禁用此功能。如果你只使用 TamperMonkey 来禁用 WebSockets,你会希望你的 TamperMonkey 大多数时候看起来像这样:
当你想阻止时像这样:
【讨论】: