¿Cómo funciona `#:~:text=` en URL para resaltar texto?

5 minutos de lectura

TL;RD

¿Cómo/por qué algunos navegadores pueden buscar y resaltar texto en el cuerpo HTML seguido de #:~:text= en la URL?


Explicación

Un día estaba buscando algo en Google, lo que me llevó a Quora’s resultado. Observé que estaban resaltadas en amarillo 2 oraciones, que formaban parte de la URL después del parámetro antes mencionado. Pensé que esta sería la característica de Quora para SEO o algo así, sin embargo, también encontré esto en LinkedIny Medioetcétera.


Me gustaría saber:

  1. ¿Cómo se llama este resaltado? ¿Por qué/cómo funciona?
  2. Esto parece ser específico del navegador. Qué amable de los navegadores admiten esto?
    Parece funcionar en Chrome y Edge; pero no en Firefox, Safari e IE.
  3. ¿Un programador frontend necesita incorporar algo en el código para que los motores de búsqueda destaquen el contenido en sus páginas web? (Basado en la suposición de que los motores de búsqueda realmente agregan la cadena relevante predicha por la consulta del usuario)

  • Y también pasa aquí. Vea Resaltado extraño durante unos segundos.

    – Sebastián Simón

    20 de julio de 2020 a las 5:21

  • El resaltado que se desvanece que ve en stackoverflow no está relacionado, es una característica del sitio cuando se vincula a una respuesta específica

    – David Bokan

    21 de abril de 2021 a las 13:32

  • Ver también: ¿Qué es exactamente el hash de ubicación `#:~:text=` en una URL?

    – KyleMit

    30 de diciembre de 2021 a las 14:46


  1. El resaltado se llama Fragmentos de texto. Es una nueva función que se agregó recientemente a Chrome 80. Funciona especificando un fragmento de texto en el hash de la URL.

  2. Sí, es específico del navegador.

  3. No, la experiencia que obtiene al hacer clic en un enlace de los resultados de búsqueda de Google es parte de los fragmentos destacados que se determinan mediante algoritmos. No hay nada que pueda incorporar en su código para solicitar a los motores de búsqueda que resalten el texto en su página.

Los webmasters no necesitan marcado. Esto sucede automáticamente, usando Scroll To Text para páginas HTML
https://chromestatus.com/feature/4733392803332096. Ver también más antecedentes aquí: https://support.google.com/webmasters/answer/6229325

Fuentes:

  • Gran respuesta. Solo algunas adiciones: es solo para Chromium en este momento, pero pretende ser una característica de la plataforma web e interoperable entre navegadores. Ver Mozilla posiciones-estándar y Safari’s webkit-dev. Un enlace adicional es el repositorio WICG donde se está incubando la característica.

    – David Bokan

    21 de abril de 2021 a las 13:38


Si bien los fragmentos de texto se implementan de forma nativa solo en la última versión de Google Chrome (y las últimas versiones de los navegadores basados ​​en Chromium, como el nuevo Microsoft Edge), hay una extensión/complemento del navegador que parece habilitarlo en Firefox y Safari: https://github.com/GoogleChromeLabs/link-to-text-fragment

parece usar #ref-for-fragment-directive:~:text= y argumentos adicionales (en lugar de simples #:~:text=).

Curiosamente, la extensión también está disponible para Chrome y Edge (!).

.

ACTUALIZACIÓN: lo estoy probando en Firefox Developer Edition y no me funciona.

  • La extensión está disponible en Chrome principalmente para permitir generando este tipo de enlaces seleccionando texto y usando el menú contextual, ¡muy útil! De hecho, esta función se está integrando en Chrome; puede probarla ahora usando chrome://flags/#copy-link-to-text

    – David Bokan

    21 de abril de 2021 a las 13:44

Avatar de usuario de Scott Yang
scott yang

Quiero decir algunas palabras con respecto a la pregunta 2.

Esta característica es específica del navegador. Funciona en Chrome 80 y otros navegadores basados ​​en Chrome como Edge. Desafortunadamente, Safari y Firefox no tienen la misma funcionalidad.

Cuando se trata de Safarise dice que hay una extensión de la versión de Safari llamada Link to Text Fragment, cuya contrapartida en Chrome funciona a la perfección. Funciona agregando el texto seleccionado con el prefijo de #:~:text= después de la URL actual. Sin embargo, después de probarlo, descubrí que no funcionaba en Safari. Y el calificaciones y reseñas de los usuarios confirmó su mal funcionamiento.

Como solución alternativa, descubrí 2 métodos.

[] Primero, puede crear su propia ‘extensión’ con una línea de código JS. Simplemente agregue un nuevo marcador en Safari. Dale un nombre y edita su URL como

javascript:(function(){const%20selectedText=getSelection().toString();const%20newUrl=new%20URL(location);newUrl.hash=`:~:text=${encodeURIComponent(selectedText)}`;window.open(newUrl);})();

Esto se llama bookmarklet. Luego, después de seleccionar un bloque de texto en una página web, haga clic en este nuevo marcador que acaba de crear. Se le abrirá una nueva página con la URL adjunta. Recuerda que en la nueva página, el texto que seleccionaste no se mostraría resaltado, ya que #:~:text= solo funciona en navegadores basados ​​en Chrome. Pero la nueva URL generada te será útil.

[] El segundo método se implementa dentro de QuickNote de MacOS. Mira esto enlace out, diciendo después de crear un enlace usando Add to Quick Note en el menú contextual,

“Aparece un enlace a la página web en la Nota rápida y el texto en Safari está resaltado. Cuando vuelve a visitar el sitio web, su resaltado sigue allí y aparece una miniatura de la Nota rápida en la esquina inferior derecha de la pantalla. “

Luego, el texto resaltado en la página web podría compartirse con los usuarios de MacOS.

Creo que estos serían muy útiles para aquellos que lo necesitan. ^^

Actualizaciones: Resulta que #:~:text= es compatible con la versión 16.1+ de Safari.

Cromo Borde Safari Firefox Ópera ES DECIR
4-73 : No compatible 12-18: No compatible 3.1 – 16.0: no compatible 2 – 111 : No compatible 10 – 65 : No compatible 6 – 10: No compatible
74-80: no compatible 79-81: No compatible 16.1 – 16.3: Compatible 112 : No compatible 66 – 67: No compatible 11: No compatible
81-111 : Compatible 83-111 : Compatible 16.4 : Compatible 113 – 114 : No compatible 68 – 94 : Compatible
112 : Compatible 112 : Compatible 16.5 – TP : Compatible 95 : Compatible
113-115 : Compatible

¿Ha sido útil esta solución?