Redirigir URL en una extensión de cromo

¿Cómo puedo redireccionar Chrome en una extensión cuando visito una URL determinada?

Por ejemplo: cuando visito http://yahoo.com/ Quiero que se redireccione a http://google.com/

Hay muchas opciones, la más intrincada que la otra.

  1. La API webRequest , específicamente el evento onBeforeRequest . (Aún mejor, la próxima API declarativeWebRequest ).
  2. Guiones de contenido . Inyectar location.replace('http://example.com') en una página.
  3. La API de tabs Utilice el evento onUpdated para detectar cuándo una página ha cambiado su ubicación, y chrome.tabs.update para cambiar su URL. Sin embargo, ¡evita un ciclo infinito!

El primero es el mejor, porque se activa incluso antes de solicitar una página. El segundo se puede activar después de que se haya completado la solicitud, pero antes de que se represente la página ( "run_at":"document_start" ) o después de que se represente ( "run_at":"document_end" ). Mencioné el último para completar, pero no deberías usarlo, porque las otras opciones son mucho mejores.

Aquí hay un ejemplo usando la API webRequest , una extensión simple que me permite navegar por las páginas en el compartimento Pirate, aunque los hosts principales son eliminados por mi ISP (la lista real de URL es mucho más larga, pero los he omitido para el sake del ejemplo).
Consulte los patrones de coincidencia para obtener una explicación sobre los formatos de 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"] ); 

Sé que estoy un poco retrasado en el juego para responder a esta pregunta. Sin embargo, me gustaría responder a esto para futuros lectores. Mira esto

Requestly : una extensión de Chrome para modificar las solicitudes de red.

Actualmente, puede configurar reglas para

  1. Redirige una URL de solicitud a otra url.
  2. Bloquea algunas solicitudes
  3. Reemplace una parte en la URL con otra cadena
  4. Modificar encabezados (agregar / quitar / modificar encabezados de solicitud y respuesta)

Capturas de pantalla para una mayor comprensión:

  • Lista de reglas

Lista de reglas

  • Tarjetas de tipo de regla

Tarjetas de tipo de regla

  • Nueva regla de redirección

Crear una regla de redirección

  • Regla de modificación de encabezados

Modificar encabezados

Hay muchas cosas en la hoja de ruta que se cubrirán en solicitud como

  • Conmutación de agentes de usuario

.. y mucho más.

PD: He creado esto Entonces puedes culparme si no encuentras esto útil 🙂