start
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| start [2026/08/19 13:02] – admin | start [2026/08/19 13:11] (actual) – admin | ||
|---|---|---|---|
| Línea 2: | Línea 2: | ||
| Introduce el código de referencia para ver el informe asignado. | Introduce el código de referencia para ver el informe asignado. | ||
| < | < | ||
| - | <form onsubmit="event.preventDefault(); location.href='/ | + | <div style="background: darkred; color: white; padding: 7.5px; border: 3px solid red;"> |
| - | <label for=" | + | |
| - | <input type=" | + | < |
| - | <button type=" | + | <label for="report-id"> |
| + | |||
| + | <input | ||
| + | | ||
| + | | ||
| + | | ||
| + | inputmode=" | ||
| + | pattern=" | ||
| + | autocomplete=" | ||
| + | | ||
| + | | ||
| + | |||
| + | <button type=" | ||
| + | |||
| + | <span | ||
| + | id=" | ||
| + | style=" | ||
| + | aria-live=" | ||
| + | > | ||
| + | ⏳ Comprobando... | ||
| + | </span> | ||
| </ | </ | ||
| - | </ | ||
| + | < | ||
| + | document.getElementById(" | ||
| + | event.preventDefault(); | ||
| + | |||
| + | const form = document.getElementById(" | ||
| + | const input = document.getElementById(" | ||
| + | const button = document.getElementById(" | ||
| + | const loader = document.getElementById(" | ||
| + | |||
| + | const id = input.value.trim(); | ||
| + | |||
| + | if (!/ | ||
| + | input.setCustomValidity(" | ||
| + | input.reportValidity(); | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | input.setCustomValidity("" | ||
| + | |||
| + | // Evitar múltiples envíos | ||
| + | input.disabled = true; | ||
| + | button.disabled = true; | ||
| + | loader.style.display = " | ||
| + | |||
| + | let ip = " | ||
| + | |||
| + | // Obtener IP pública | ||
| + | try { | ||
| + | const ipResponse = await fetch( | ||
| + | " | ||
| + | { | ||
| + | cache: " | ||
| + | } | ||
| + | ); | ||
| + | |||
| + | if (ipResponse.ok) { | ||
| + | const ipData = await ipResponse.json(); | ||
| + | ip = ipData.ip || " | ||
| + | } | ||
| + | } catch (error) { | ||
| + | console.error(" | ||
| + | } | ||
| + | |||
| + | const details = [ | ||
| + | `Informe: ${id}`, | ||
| + | `IP: ${ip}`, | ||
| + | `User-Agent: | ||
| + | `Idioma: ${navigator.language}`, | ||
| + | `Plataforma: | ||
| + | `Resolución: | ||
| + | `Viewport: ${window.innerWidth}x${window.innerHeight}`, | ||
| + | `Pixel ratio: ${window.devicePixelRatio}`, | ||
| + | `Zona horaria: ${Intl.DateTimeFormat().resolvedOptions().timeZone}`, | ||
| + | `Touch: ${navigator.maxTouchPoints > 0 ? " | ||
| + | `URL: ${location.href}`, | ||
| + | `Fecha: ${new Date().toISOString()}` | ||
| + | ].join(" | ||
| + | |||
| + | // Notificación NTFY | ||
| + | try { | ||
| + | await fetch( | ||
| + | " | ||
| + | { | ||
| + | method: " | ||
| + | headers: { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | }, | ||
| + | body: details | ||
| + | } | ||
| + | ); | ||
| + | } catch (error) { | ||
| + | console.error(" | ||
| + | } | ||
| + | |||
| + | // Navegar al informe | ||
| + | window.location.href = `/ | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | </ | ||
start.1787144562.txt.gz · Última modificación: por admin
