Redirection D'URL dans une extension chrome

Comment puis-je rediriger chrome dans une extension lors de la visite d'une URL donnée?

Par exemple: quand je visite http://yahoo.com/ Je veux qu'il redirige vers http://google.com/

22
demandé sur sachinjain024 2012-08-22 04:53:43

2 réponses

Il y a beaucoup d'options, l'une plus alambiquée que l'autre.

  1. Le webRequest API, plus précisément le onBeforeRequest événement. (Encore mieux, le prochain declarativeWebRequest API).
  2. scripts de contenu . Injecter location.replace('http://example.com') dans une page.
  3. Le tabs l'API. Utilisez le onUpdated événement pour détecter quand une page a changé d'emplacement, et chrome.tabs.update pour changer son URL. Évitez cependant une boucle infinie!

Le premier l'un est le meilleur, car il est activé avant même qu'une page ne soit demandée. Le second peut être activé après que la requête a été remplie, mais avant que la page soit rendue ("run_at":"document_start") ou après qu'elle soit rendue ("run_at":"document_end"). J'ai mentionné le dernier pour être complet, mais vous ne devriez pas l'utiliser, car les autres options sont bien meilleures.

Voici un exemple utilisant l'API webRequest, une simple extension qui me permet de parcourir des pages sur The Pirate bay, même si les hôtes principaux sont pris en charge par mon FAI (la liste réelle des URL est beaucoup plus longue, mais je les ai omises pour l'exemple).
Voir modèles de correspondance pour une explication sur les formats D'URL.

manifest.json

{
  "name": "The Pirate Bay",
  "description": "Redirect The Pirate Bay to a different host",
  "version": "1.0",
  "manifest_version": 2,
  "background": {"scripts":["background.js"]},
  "permissions": [
    "webRequest",
    "*://thepiratebay.se/*",
    "*://www.thepiratebay.se/*",
    "webRequestBlocking"
  ]
}

background.js

var host = "http://tpb.pirateparty.org.uk";
chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
         return {redirectUrl: host + details.url.match(/^https?:\/\/[^\/]+([\S\s]*)/)[1]};
    },
    {
        urls: [
            "*://piratebay.se/*",
            "*://www.piratebay.se/*"
        ],
        types: ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"]
    },
    ["blocking"]
);
43
répondu Rob W 2012-08-22 10:39:17

Je sais que je suis un peu en retard dans le jeu pour répondre à cette question encore je voudrais répondre à cela pour les futurs lecteurs. Jetez un oeil à

Requestly - une Extension Chrome pour modifier les requêtes réseau.

Actuellement, Vous pouvez configurer des règles pour

  1. rediriger une URL de requête vers une autre url.
  2. bloquer certaines requêtes.
  3. remplacez une partie de L'URL par une autre chaîne
  4. Modifier Les En-Têtes (Ajouter / Supprimer / Modifier les en-têtes de requête et de réponse)

Captures d'écran pour plus de compréhension:

  • liste des règles

Liste des règles

  • Cartes De Type De Règle

Cartes De Type De Règle

  • Nouvelle Règle De Redirection

Création d'une règle de redirection

  • Règle De Modification Des En-Têtes

Modifier Les En-Têtes

Il y a beaucoup de choses dans roadmap à couvrir dans requestly comme

  • Changer D'Agent Utilisateur

.. et beaucoup plus.

PS: j'ai créé ceci afin que vous puissiez me blâmer si vous ne trouvez pas cela utile:)

17
répondu sachinjain024 2018-07-16 22:40:45