2008-11-14 47 views
9

Tenemos una página web avanzada (ASP.NET, C#) y una aplicación que debe instalarse en la computadora cliente para utilizar la página web al máximo. La aplicación es una aplicación de bandeja y tiene principalmente dos tareas. Detectar cuándo ocurren ciertos eventos en el servidor web (por ejemplo, invitarlos a una reunión o notificar acerca de una próxima reunión). La otra tarea que tiene la aplicación trayapp es usar un protocolo personalizado (trayapp: //) para realizar algunas llamadas ajax al servidor.Detectar desde el navegador si está instalada una aplicación específica

Un problema que tenemos es cómo determinar si la aplicación está instalada en la máquina local o no. Ahora el usuario tiene que marcar una casilla de verificación para informar al sitio web que la aplicación está instalada y que es seguro llamar a trayapp: // url calls.

¿Hay alguna manera, por ejemplo a través de JavaScript o similar para detectar si nuestra aplicación está instalada en la máquina local?

El cheque debe funcionar para los navegadores IE, FF y Opera.

Respuesta

5

Si desea detectar con javascript dentro del navegador, probablemente pueda usar la colección "navigator.plugins". Funciona con Firefox, Opera y Chrome, pero desafortunadamente no con IE.

Actualización: En FF, Opera y Chrome se puede probar fácilmente de esta manera:

if (navigator.plugins["Adobe Acrobat"]) { 
// do some stuff if it is installed 
} else { 
// do some other stuff if its not installed 
} 

Actualización # 2: Si se trata de un objeto ActiveX en IE puede probar si es que existe por el uso de algo de esta manera:

function getActiveXObject(name){ 
     try{ 
      return new ActiveXObject(name); 
     } 
     catch(err){ 
      return undefined; 
     } 
}; 

Otro enfoque para IE es algo similar a lo que sugirió JohnFx (lo encontré here y no lo he probado):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Internet 
Settings\User Agent\Post Platform 
+0

tal vez en IE puede probar un CreateObject() de un ActiveX registrado también desde javascript para verificar si la aplicación está instalada –

5

Al instalar su aplicación del lado del cliente puede modificar la configuración del navegador para incluir otro encabezado de solicitud en solicitudes HTTP y luego hacer que el código del servidor busque ese encabezado, por ejemplo como un tipo de mime admitido usando la siguiente clave de registro (para Internet explorer)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ 
                 Internet Settings\Accepted Documents 

no estoy seguro de si Opera y FF utilizan esta misma clave, pero lo más probable es tener opciones de configuración similares, pero esto se debe, al menos, conseguir que en el camino correcto.

+1

Estoy muy interesado en este enfoque, pero no puede encontrar ninguna instrucción clara sobre cómo . ¿Tiene un ejemplo de cómo se puede establecer esto entre navegadores? –

1

Buena idea de @JohnFx.

Otra forma de abordar esto sería instalar un control ActiveX o un complemento de navegador con la instalación de trayapp. A continuación, puede acceder a esto de forma similar a la que se hace cuando se comprueba la versión de Flash disponible.

0

Exponga la trayapp (asumiendo esto como una aplicación administrada) como objeto COM. A continuación, podría usar la etiqueta con el GUID y atrapar errores cuando no se encuentre o utilizar ActiveXobject con el programa para detectar si está instalado.

2

Bueno, el método mencionado por "algunos" es muy común pero también hay otros métodos, por ejemplo, si la aplicación está escuchando localmente en un puerto, puede detectarse desde el navegador, que es muy común para soluciones de seguridad porque tienen tipo de proxy local para filtrar el tráfico.De hecho, me hice un video hace un tiempo acerca del uso de esta técnica para detectar avast antivirus se puede ver aquí:

https://www.youtube.com/watch?v=39_Nd8oiEAk

+0

Parece una buena idea. ¿Cómo puede la aplicación de bandeja escuchar en un puerto y manejar solicitudes? – xr280xr

+1

Puede simplemente abrir un socket en un puerto de certian y mostrar una imagen si puede cargar la imagen y luego la aplicación está allí. También puede responder con json y permitir que cierto dominio lea ese json. –

+0

Gracias. Parece que la clase [HttpListener] (https://msdn.microsoft.com/en-us/library/system.net.httplistener (v = vs.110) .aspx) también podría ser útil aquí. – xr280xr

Cuestiones relacionadas