24 votos

¿Cómo cambiar la URL de un acceso directo de una aplicación de Chrome?

Tengo 2 cuentas de Google (personal/trabajo). Si voy al sitio de Google Calendar, en la cuenta de trabajo, en Chrome, puedo ir a ... / Más herramientas / Crear acceso directo..., lo cual creará un archivo Google Calendar.app.

Luego puedo agregarlo al dock, ¡pero va a la cuenta incorrecta! :(

Si hago Mostrar contenido del paquete puedo abrir el archivo Info.plist y veo la URL dentro:

    CrAppModeShortcutURL
    https://calendar.google.com/calendar/r

Ahora si cambio la URL a https://calendar.google.com/calendar/b/1/r (que es la forma correcta de elegir una cuenta específica de Google), esperaría que funcione. Pero de hecho eso no cambia nada.

Pero en realidad, incluso si pongo cualquier sitio web aleatorio aquí, seguirá yendo a Google Calendar, así que básicamente pienso que esto no tiene ningún efecto, lo cual es sorprendente.

¿Alguna idea?

0 votos

Vi la solución de Karl. Me pregunto si hay una más simple...

39voto

jrad Puntos 216

También tuve este problema (intentando crear un acceso directo a la segunda cuenta de Google Calendar) y lo resolví creando un manifiesto de aplicación web antes de crear el acceso directo a la aplicación:

  1. Copia el JavaScript a continuación
  2. En la página de Google Calendar, abre las Herramientas para desarrolladores de Chrome (haz clic derecho en cualquier parte de la página y selecciona "Inspeccionar")
  3. Ve a la pestaña de Consola y pega el JavaScript copiado
  4. Modifica la URL si es necesario al URL que estás intentando crear la aplicación
  5. Pulsa enter para ejecutar el JavaScript

    const startUrl = 'https://calendar.google.com/calendar/u/1/r';

    const unsanitizedHtmlPolicy = trustedTypes.createPolicy('unsanitizedHtml', { createHTML: (htmlString) => htmlString, });

    document.head .querySelector(':first-child') .insertAdjacentHTML( 'beforebegin', unsanitizedHtmlPolicy.createHTML( ``, ), );

Esto añadirá un Manifiesto de Aplicación Web para este sitio web que se utilizará al crear la aplicación.

Una vez que hayas hecho esto, puedes crear la aplicación de escritorio como de costumbre:

  1. Haz clic en el menú de los tres puntos > Herramientas > Crear acceso directo
  2. Marca "Abrir como ventana" y selecciona "Crear"

Ahora deberías tener una aplicación de escritorio separada para tu segunda cuenta de calendario.

Fuente: https://github.com/karlhorky/pwa-tricks#change-starting-url-of-pwa-in-chrome


Alternativas: Editar el Manifiesto Existente, Soluciones para Restricciones de Seguridad

Si estás intentando añadir una PWA diferente a Google Calendar donde la página ya especifique un manifiesto o establezca la directiva de Política de Seguridad de Contenidos manifest-src o trusted-types, entonces la solución anterior puede no funcionar, potencialmente también devolviendo un error como:

Se ha denegado la carga del manifiesto desde 'data:application/manifest+json,...' porque infringe la siguiente directiva de Política de Seguridad de Contenidos: "manifest-src 'self'".

Para solventar esto, tienes dos opciones adicionales:

A) Editar HTML Manualmente

Cambia a la pestaña Elementos de las Herramientas del desarrollador de Chrome y edita manualmente el HTML para que coincida con el manifiesto en el JavaScript anterior

B) Anulaciones Locales de Chrome

Utiliza Anulaciones Locales de Chrome para modificar el start_url en el Manifiesto de Aplicación Web:

  1. En la página de la aplicación, abre las Herramientas para desarrolladores de Chrome (haz clic derecho en cualquier parte de la página y selecciona "Inspeccionar")

  2. Localiza y expande el elemento y encuentra el elemento link con rel="manifest". Observa la ruta del archivo en href.

  3. Abre la pestaña Fuentes en las Herramientas de desarrollo. Si no has utilizado anulaciones antes, necesitarás configurarlas:

    • Cambia a la pestaña de 2º nivel Anulaciones (puede que necesites buscarla en el menú »)

    • Crea una nueva carpeta en tu carpeta proyectos o Documentos llamada chrome-overrides

    • Haz clic en + Seleccionar carpeta para anulaciones y selecciona la carpeta que creaste

    • Confirma cualquier mensaje en la parte superior del navegador pidiendo acceso a la carpeta

  4. Actualiza la página para asegurarte de que se carguen todas las fuentes. Localiza el manifiesto de la aplicación web correspondiente a la ruta del archivo que anotaste anteriormente. Haz clic derecho y selecciona Guardar para anulaciones:

  5. ¡Ahora el manifiesto de la aplicación web es editable! Realiza los cambios necesarios en start_url o cualquier otra cosa que necesites, guarda el archivo y recarga la página

  6. El manifiesto de la aplicación web actualizado ahora se ha cargado y puedes instalar o crear un acceso directo a la PWA como de costumbre

0 votos

¡Qué bueno que te haya ayudado!

0 votos

¡No hay problema!

2 votos

Esto funcionó para YouTube, no me permitía establecer la URL para un video que quería tener una banda sonora de video en primer plano (por ejemplo, youtube.com/watch?v=_JJJBQSBiA4&t=83s) que quería convertir en PWA a un tiempo específico. Siempre eliminaba toda la ruta, quedando solo www.youtube.com. El primer método funcionó y tomó alrededor de 30 segundos una vez que terminé de leer, que por alguna razón parecía más complicado de lo que realmente era. Tuve que desinstalar la PWA/Acceso directo anterior y volver a agregarlo, como era de esperar. Supongo que esta solución también podría ser empaquetada como una extensión de Chrome.

3voto

Paul Puntos 121

Introducción

He utilizado el JavaScript de esta respuesta de Karl, pero me di cuenta de que la aplicación instalada usaría un favicon rudimentario, en lugar de los iconos más bonitos definidos en el manifiesto original.

He adaptado el script para actualizar el manifiesto original, en lugar de crear uno nuevo.

Edición del 11.01.2024 basada en la sugerencia y respuesta de Jason: Mantener los parámetros de búsqueda de la URL de inicio, tener en cuenta el hash de ubicación, establecer el ámbito de navegación y evitar romper los caminos absolutos de los iconos.

Personalización

Para cambiar la URL de inicio y otros detalles, podemos hacer que el navegador use nuestro propio manifiesto personalizado:

  1. Abre el sitio web y ve a la URL deseada. Si no es posible, ajusta la URL en el script.
  2. Abre la pestaña de consola en las herramientas para desarrolladores, en Chrome o Edge: Ctrl + Shift + I.
  3. Copia el JavaScript a continuación en la consola y presiona Enter.
  4. Cierra la consola y añade una aplicación, Menú > Aplicaciones > Instalar este sitio como una aplicación.

Personalizar el manifiesto original mantiene los iconos y otros detalles que no queremos cambiar.

El script

manifest = document.head.querySelector('link[rel="manifest"]');
json = await fetch(manifest.href).then(res => res.json());

url = new URL(window.location);
url.search = new URLSearchParams([...new URL(json.start_url, url).searchParams, ...url.searchParams]);

json.start_url = url.href;
json.scope = url.origin + url.pathname.substring(0, url.pathname.lastIndexOf('/') + 1);
json.icons.forEach((icon) => icon.src = new URL(icon.src, manifest.href).href);

manifest.href = 'data:application/manifest+json,' + encodeURIComponent(JSON.stringify(json));

json;

Con comentarios

// Encuentra el nodo head que enlaza con el manifiesto original.
manifest = document.head.querySelector('link[rel="manifest"]');

// Obtiene el manifiesto y lo convierte a json.
json = await fetch(manifest.href).then(res => res.json());

// Crea una nueva URL para la ubicación actual, manteniendo los parámetros de la URL de inicio original.
url = new URL(window.location);
url.search = new URLSearchParams([...new URL(json.start_url, url).searchParams, ...url.searchParams]);

// Establece la URL de inicio y el ámbito. Volverá a ser un navegador normal al navegar fuera del ámbito.
json.start_url = url.href;
json.scope = url.origin + url.pathname.substring(0, url.pathname.lastIndexOf('/') + 1);

// Convierte los caminos de iconos relativos en el manifiesto en caminos absolutos.
// Cuando el manifiesto está definido en línea, los caminos deben ser absolutos e incluir el protocolo.
json.icons.forEach((icon) => icon.src = new URL(icon.src, manifest.href).href);

// Almacena el manifiesto actualizado en línea en el nodo de enlace original.
// Debe estar codificado en URI, de lo contrario el # en los colores causaría errores de análisis.
manifest.href = 'data:application/manifest+json,' + encodeURIComponent(JSON.stringify(json));

// Muestra el manifiesto actualizado en la consola para su revisión.
json;

1voto

daniel2029 Puntos 11

Intenté crear un acceso directo de la aplicación de escritorio para el calendario de Outlook de Microsoft 365 y siempre me redirigió de nuevo al componente de correo. La solución a esta pregunta no funcionó para mí, pero al ir a la pestaña de fuentes y editar manualmente el archivo de manifiesto de la URL y luego crear el acceso directo funcionó perfectamente. Solo lo estoy poniendo aquí en caso de que la otra solución no funcione, la mía podría ser útil.

0 votos

Correcto, de hecho, también agregué instrucciones detalladas sobre esto a mi repositorio pwa-tricks hace 3 días : github.com/karlhorky/…

0 votos

También agregaré una sección a la respuesta anterior haciendo referencia a esta segunda solución en el repositorio, que también debería haber sido actualizada hace 3 días.

1voto

MrPB Puntos 10

La primera parte de la respuesta de Karl Horky arriba es correcta, sin embargo, parece que Google ha empezado a usar TrustedHTML en sus aplicaciones web, por lo que ya no funciona para Gmail, Google Calendar, etc.

Esta es una actualización de su respuesta que funciona en sitios de Google y no de Google.

const startUrl = 'https://calendar.google.com/calendar/u/1/r';

const escapeHTMLPolicy = trustedTypes.createPolicy("forceInner", { createHTML: (to_escape) => to_escape });
document.head
  .querySelector(':first-child')
  .insertAdjacentHTML(
    'beforebegin',
    escapeHTMLPolicy.createHTML(``),
  );

1voto

Jason Parker Puntos 11

Basándose en el comentario de Paul (con la edición de agarza), esto agrega la capacidad de mantener los parámetros de consulta y el hash existentes (por ejemplo, #inbox), y solo cambia los iconos con rutas relativas.

// Encuentra el nodo head que hace referencia al manifiesto original.
manifest = document.head.querySelector('link[rel="manifest"]');

// Obtén el manifiesto y conviértelo a JSON.
json = await fetch(manifest.href).then(res => res.json());

// Crea objetos URL para la ubicación actual y la start_url del manifiesto con la ubicación actual como base de URL, luego combina los parámetros de consulta.
window_href = new URL(window.location);
start_href = new URL(json.start_url, window_href);
window_href.search = new URLSearchParams({
  ...Object.fromEntries(window_href.searchParams),
  ...Object.fromEntries(start_href.searchParams)
});

// Establece la start url en la ubicación actual con los parámetros de consulta combinados.
json.start_url = window_href.href;
json.scope = window_href.pathname;

// Convierte las rutas de iconos relativas en el manifiesto en rutas absolutas.
json.icons.forEach((icon) => icon.src = (icon.src.startsWith('http') || icon.src.startsWith('//')) ? icon.src : base + icon.src)

// Almacena el manifiesto actualizado en el nodo de enlace original.
// Debe ser codificado en URI.
manifest.href = `data:application/manifest+json,${encodeURIComponent(JSON.stringify(json))}`;

json;

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X