web-dev-qa-db-fra.com

URL de redirection dans une extension chrome

Comment puis-je rediriger chrome dans une extension lorsque je visite une URL donnée?

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

26
user1380936

Il existe de nombreuses options, l'une plus compliquée que l'autre.

  1. L'API webRequest , en particulier l'événement onBeforeRequest . (Encore mieux, la prochaine declarativeWebRequest API ).
  2. Scripts de conten . Injectez location.replace('http://example.com') dans une page.
  3. API tabs . Utilisez l'événement onUpdated 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 est le meilleur, car il est activé avant même qu'une page ne soit demandée. Le second peut être activé une fois la demande satisfaite, mais avant le rendu de la page ("run_at":"document_start") ou après son rendu ("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 les pages de la baie Pirate, même si les principaux hôtes sont supprimés par mon FAI (la liste réelle des URL est beaucoup plus longue, mais je les ont omis pour les besoins de 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"]
);
49
Rob W

Je sais que je suis un peu en retard dans le jeu pour répondre à cette question. J'aimerais quand même répondre à cela pour les futurs lecteurs. Jettes un coup d'oeil à

Requis - A Chrome Extension pour modifier les requêtes réseau.

Actuellement, vous pouvez configurer des règles pour

  1. Redirigez une URL de demande vers une autre URL.
  2. Bloquer certaines requêtes.
  3. Remplacer une partie de l'URL par une autre chaîne
  4. Modifier les en-têtes (Ajouter/supprimer/modifier les en-têtes de demande et de réponse)

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

  • Liste des règles

List of Rules

  • Cartes de type de règle

Rule Type Cards

  • Nouvelle règle de redirection

Creating a Redirect Rule

  • Règle de modification des en-têtes

Modify Headers

Il y a beaucoup de choses dans la feuille de route à couvrir en tant que demande comme

  • Changer d'agent utilisateur

.. et beaucoup plus.

PS: J'ai créé cela. Vous pouvez donc m'en vouloir si vous ne trouvez pas cela utile :)

19
sachinjain024