👉 ¿Hablamos de Frontend? Mira mis clases personalizadas en Perú 🧑‍💻
¡Link copiado!

Compartir tu web por redes sociales con la Web Share API

img of Compartir tu web por redes sociales con la Web Share API
APIs Web | | 4 minutos

Revisemos cómo facilitar que un usuario comparta una página web por diferentes redes sociales utilizando el componente nativo del sistema operativo de su celular.

Para este caso de uso la API permitirá compartir la URL solo cuando el usuario esté en la versión mobile de su web. Por ello, vamos a agregar una alternativa para la versión desktop que solo permitirá copiar la URL.

🚀 Ventajas

El usuario ya está familiarizado con el flujo nativo para compartir contenido entre sus apps. Esto ayuda a mantener una experiencia de usuario más simple y estándar para la versión mobile.

No necesitamos dependencias extras en nuestro proyecto o crear un componente personalizado. Es una API del navegador sencilla de usar.

🧑‍💻 Ejemplo paso a paso

Este snippet crea un botón de compartir que:

  • Usa la Web Share API si estás en un móvil o tablet.
  • Si estás en una laptop o PC, simplemente copia la URL al portapapeles.
  • Es limpio, sin frameworks, solo HTML, CSS y JS puro.

📦 El HTML

   <button class="share_btn">
	<!-- Ícono de compartir (SVG) -->
</button>

Tenemos un botón con una clase share_btn y dentro, un bonito ícono SVG que representa el típico símbolo de compartir. ¡Minimalista y funcional!

🎨 El toque de estilo (CSS)

   .share_btn {
	outline: none;
	border: none;
	background: none;
	cursor: pointer;
}

.share_btn:active {
	transform: scale(1.1);
}

Estilizamos el botón para que se vea bien en cualquier fondo y tenga una ligera animación cuando lo presionas. Esa pequeña escala al hacer clic le da un toque interactivo.

📱 1. Detectar si estás en un dispositivo móvil o tablet

   const isMobileOrTablet = () => {
	const userAgent = navigator.userAgent
	return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|Tablet|Silk|Kindle|PlayBook|BB10/i.test(
		userAgent
	)
}

Se revisa el userAgent para saber si estás desde un dispositivo móvil. No es perfecto, pero funciona bien para la mayoría de los casos.

📋 2. Función para copiar al portapapeles

   const writeClipboardText = (text) => {
	navigator.clipboard.writeText(text).catch(console.error)
}

Si no se puede compartir de forma nativa, ¡al menos que el usuario pueda copiar el enlace con un clic!

🔗 3. Lógica del botón de compartir

   const onShare = (text = 'Compartir', url = location.href) => {
	if (!navigator.share || !isMobileOrTablet()) return writeClipboardText(url)
	navigator.share({ text, url }).catch(console.error)
}
  • Si el navegador no soporta navigator.share o estás en escritorio: copia el link.
  • Si estás en móvil/tablet y el navegador lo permite: muestra el modal de compartir nativo.

🎯 4. Activamos el botón

   const shareButtons = document.querySelectorAll('.share_btn')
shareButtons.forEach((btn) => btn?.addEventListener('click', () => onShare()))

Seleccionamos todos los botones con clase .share_btn y les agregamos el evento click para que hagan su trabajo cuando se presionan.

🧑‍💻 Ejemplo completo

   <!doctype html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>Compartir tu web por redes sociales con la Web Share API</title>
		<style>
			.share_btn {
				outline: none;
				border: none;
				background: none;
				cursor: pointer;
			}

			.share_btn:active {
				transform: scale(1.1);
			}
		</style>
	</head>
	<body>
		<button class="share_btn">
			<svg
				stroke="currentColor"
				fill="currentColor"
				stroke-width="0"
				viewBox="0 0 24 24"
				height="1em"
				width="1em"
				xmlns="http://www.w3.org/2000/svg"
			>
				<path
					d="M20 5.5a3.498 3.498 0 0 1-6.062 2.385l-5.112 3.021a3.498 3.498 0 0 1 0 2.188l5.112 3.021a3.5 3.5 0 1 1-.764 1.29l-5.112-3.02a3.499 3.499 0 1 1-3.843-5.642 3.499 3.499 0 0 1 3.843.872l5.112-3.021A3.5 3.5 0 1 1 20 5.5Zm-1.5 13a2 2 0 1 0-3.999-.001 2 2 0 0 0 3.999.001Zm0-13a2 2 0 1 0-3.999-.001A2 2 0 0 0 18.5 5.5ZM5.5 14a2 2 0 1 0 .001-3.999A2 2 0 0 0 5.5 14Z"
				></path>
			</svg>
		</button>
		<script>
			const isMobileOrTablet = () => {
				const userAgent = navigator.userAgent
				return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|Tablet|Silk|Kindle|PlayBook|BB10/i.test(
					userAgent
				)
			}

			const writeClipboardText = (text) => {
				navigator.clipboard.writeText(text).catch(console.error)
			}

			const onShare = (text = 'Compartir', url = location.href) => {
				if (!navigator.share || !isMobileOrTablet()) return writeClipboardText(url)
				navigator.share({ text, url }).catch(console.error)
			}

			const shareButtons = document.querySelectorAll('.share_btn')
			shareButtons.forEach((btn) => btn?.addEventListener('click', () => onShare()))
		</script>
	</body>
</html>

Si deseas profundizar más sobre esta API, puedes revisar el siguiente artículo del blog de Chrome: Integrate with the OS sharing UI with the Web Share API

¡Gracias por leer!

Si te ha gustado este artículo, ¡compártelo con tus amigos y seguidores! Tu apoyo me motiva a llegar a más personas y a seguir creando contenido increíble para ti.