Estoy tratando de inyectar código con Cloudflare Workers si la URL incluye el parámetro ?beta .
Esto es lo que probé:
addEventListener("fetch", (event) => { event.respondWith( handleRequest(event.request).catch( (err) => new Response(err.stack, { status: 500 }) ) ); }); class ElementHandler { element(element) { element.append(`<style>.test {display:none}</style>`, { html: true }); } } async function handleRequest(request) { const url = new URL(request.url) const res = await fetch(request) if (url.pathname.includes("?beta")) { return new HTMLRewriter().on("head", new ElementHandler()).transform(res) } else { return fetch(request) } }Desafortunadamente, no funciona... el código no se agrega al encabezado si agrego ?beta a la URL del trabajador.
No me sale ningún error de la consola. ¿Alguien podría detectar lo que está mal?
El problema está aquí:
if (url.pathname.includes("?beta")) { url.pathname contiene solo la parte de la ruta de la URL. Sin embargo, el ? y todo lo que sigue no se considera parte del camino. En cambio, es parte de url.search . Así que podrías hacer:
if (url.search.includes("?beta")) { Pero esto podría romperse cuando hay varios parámetros, como ?foo=bar&beta . En cambio, lo mejor es usar url.searchParams , que es un mapa clave/valor de todos los parámetros:
if (url.searchParams.has("beta")) {