web-dev-qa-db-fra.com

Comment puis-je désactiver temporairement Websocket dans Google Chrome?

Je souhaite désactiver temporairement le Websocket dans Google Chrome pour déboguer un javascript afin de m'assurer qu'il fonctionne pour tout navigateur sans prise en charge du Websocket.

40
Cygan

Pour commencer, je dirais qu'il existe de meilleurs mécanismes pour tester votre JavaScript dans un environnement websocketless. Vous pouvez exécuter votre JavaScript dans IE9, par exemple, qui n'implémente pas le protocole. Ils sont également désactivés pour le moment dans Firefox 4, si c'est plus votre style.

En supposant qu'il y ait une bonne raison pour laquelle vous devez tester dans un chrome sans socket, je pense que vous n'avez pas de chance. Il n'y a pas de mécanisme trivial pour désactiver les WebSockets dans Chromium. Il n'est pas intégré en tant que commutateur de ligne de commande, ni d'indicateur configurable. Puisqu'il n'y a aucun mécanisme pour que cela se produise nativement, je ne suggérerais pas de passer du temps à tester le scénario. Chaque version de Chromium que vos utilisateurs utilisent (par exemple, 9+) a des websockets activés.

Cela dit, si vous avez vraiment besoin de désactiver les websockets, le plus proche possible sans recompiler le navigateur serait de supprimer les variables pertinentes dans votre code de test:

WebSocket = undefined;

serait relativement brutale, mais devrait fonctionner. Vous pouvez même créer une extension pour injecter ce JavaScript dans chaque page que vous visitez, pour une expérience vraiment sans Websocket (en supposant, encore une fois, que cela est en quelque sorte utile pour votre cas d'utilisation).

21
Mike West

J'ai pu bloquer WebSockets avec Fiddler .

Allez dans Rules/Customize Rules ... dans le menu Fiddler

Ajoutez ce code à la classe Handlers (Je le mets après les éléments RulesOption existants):

    // Block Websockets
public static RulesOption("Block Websockets")
BindPref("fiddlerscript.rules.BlockWebsockets")
var m_BlockWebsockets: boolean = false; 

Ajoutez ce code dans OnBeforeRequest:

    if (m_BlockWebsockets && oSession.oRequest.headers.Exists("Connection") && oSession.oRequest["Connection"] == "Upgrade") {
                oSession.oRequest.FailSession(502, "Blocked", "Fiddler blocked websocket connection");
                return;
            }

Cela ajoute une option de menu Bloquer les Websockets au menu Règles. Lorsqu'il est activé, les connexions ws doivent être bloquées en fonction de l'en-tête Connection: Upgrade.

7
Debby Mendez