javascript - internet - detectar navegador php
La comprobación más simple entre navegadores si el controlador de protocolo está registrado (4)
Cuando el usuario hace clic en el enlace con un protocolo personalizado (como myapp://superlink
)
Necesito lanzar una aplicación o permitir que el usuario descargue y ejecute la aplicación de configuración
Estoy buscando una forma de navegador cruzado para comprobar si el protocolo personalizado está registrado
He intentado determinar esto comprobando el lado del servidor del agente de usuario (para IE)
[HKEY_LOCAL_MACHINE / SOFTWARE / Wow6432Node / Microsoft / Windows / CurrentVersion / Internet Settings / 5.0 / User Agent / Post Platform] "myapp" = "
envía
`....NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3; **myapp**`
como usuario-agente
Esto es bueno, forma limpia, fácil configuración:
simplemente descargue el archivo .reg y ejecútelo o propague a través de la política de MS Windows
No puedo arreglar esto para Chrome y Firefox
¿Hay alguna solución del lado del cliente (en js)?
Mi entorno: IE8 +, Chrome (más reciente), Firefox (más reciente)
Actualización a la respuesta de Korono, esto funcionó para mí:
$(function() {
var timeIndex;
$("a[href*=''myapp://'']").blur(function(e)
{
clearTimeout(timeIndex);
});
$("a[href*=''myapp://'']").click(function(e)
{
var el = $(this);
timeIndex = setTimeout(function() {
window.location = el.attr("data-href-alt");
}, 200);
// once you do the custom-uri, it should properly execute the handler, otherwise, the settimeout that you set before will kick in
window.location = el.attr("href");
e.preventDefault();
});
});
Hay estos viejos trucos que siempre me fallan.
La funcionalidad principal que necesita es setTimeout
. Te lo diré en detalle:
setTimeout(function() {
window.location = "http://itunes.com/app/yourapplocation";
}, 200);
// once you do the custom-uri, it should properly execute the handler, otherwise, the settimeout that you set before will kick in
window.location = "myapp://superlink";
Ahora mencionó que tal vez un enlace o enlaces, así que hice esta buena función solo para su conveniencia:
Código HTML
<a href="myapp://superlink" data-href-alt="http://itunes.com/app/yourapplocation">Click here</a>
Código JS
$("a[href*=''myapp://'']").click(function(e)
{
var el = $(this);
setTimeout(function() {
window.location = el.data("data-href-alt");
}, 200);
// once you do the custom-uri, it should properly execute the handler, otherwise, the settimeout that you set before will kick in
window.location = el.data("href");
e.preventDefault();
});
Espero que esto te ayudará :)
La solución de kororo no funcionaría para mí por alguna razón, así que me las arreglé con esta solución ligeramente modificada.
<html>
<a id="link">Click Me</a>
<script>
var link = document.getElementById(''link'');
var timeout;
window.addEventListener(''blur'',function(e){
window.clearTimeout(timeout);
})
link.addEventListener(''click'', function(e) {
timeout = window.setTimeout(function() {
console.log(''timeout'');
window.location = "https://myapp.net";
}, 1000);
window.location = "myapp://";
e.preventDefault();
});
</script>
</html>
Tuve un problema similar en el que necesitaba comprobar si un protocolo personalizado ya está registrado (lo que abrirá un archivo ejecutable), o abrir una página de descarga o hacer otra cosa. Desafortunadamente, no hay una manera fácil de lidiar con esto ya que cada navegador se comporta de manera diferente. Intenté recopilar toda la información y crear una biblioteca bastante genérica para este asunto, puede echar un vistazo a:
https://github.com/ismailhabib/custom-protocol-detection
ps: la solución para no Windows 8 IE es bastante fea, pero no pude encontrar una solución mejor.