es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué Chrome muestra alerta al azar cuando se intenta abrir una URL de protocolo personalizado con location.href?

Revisé otros hilos sobre Chrome y aplicaciones con protocolos personalizados, pero no pude resolver una duda que tengo. En mi aplicación web, cuando se hace clic en un botón, se abre una nueva pestaña con una página web (window.open (url, “_blank”)). La nueva pestaña se abre con la URL (otra aplicación web con protocolo https). Esta URL inicia una función JavaScript al cargarse que verifica algunas cosas y luego genera una URL personalizada, por ejemplo, myurl://base64code, y la coloca en un iframe existente de esta manera windows.frames [‘myframe’]. location.href = theCustomProtocolUrl. Lo intenté de diferentes formas (location.replace, crear un nuevo iframe y establecer la URL, etc.) y siempre tengo el mismo problema. Si actualizo la página (ctrl f5), siempre muestra el cuadro de diálogo o si abro el enlace con la consola de desarrollador abierta. Pero si hago clic en mi botón y se abre la página en una nueva pestaña, no funciona solo si actualizo (ctrl + f5). Esto funciona perfectamente en IE11, lanza la aplicación directamente.

¿Alguna idea de por qué Chrome y Edge funcionan así?

ACTUALIZACIÓN: he encontrado la razón, es que uso la biblioteca protocolcheck.js (https://gist.github.com/vladimirtsyupko/cfcd332476b16683bb0b).

Primero intenté abrir un protocolo con el timeoutHack (usa el evento blur) y luego, después de fallar, desencadena la otra URL (en este caso https) y el cuadro de diálogo no aparece. Encontré un error con el evento blur en chrome> 85 https://bugs.chromium.org/p/chromium/issues/detail?id=1137801

Gracias de antemano

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema con la aplicación de protocolo personalizado que no funciona en Chrome y Edge se debe al uso de la biblioteca protocolcheck.js. La biblioteca intenta abrir el protocolo personalizado con un timeoutHack y si falla, lanza la otra URL. Sin embargo, hay un error con el evento blur en las versiones de Chrome superiores a 85 que hace que aparezca el cuadro de diálogo incluso cuando se lanza la otra URL. Este problema no ocurre en IE11, por eso funciona perfectamente ahí.

    Una solución podría ser eliminar el uso de la biblioteca protocolcheck.js e intentar lanzar el protocolo personalizado directamente, y si eso falla, lanzar la otra URL sin el timeoutHack. Alternativamente, podrías esperar a que Chrome solucione el error en una versión futura.

Comments are closed.