2008-11-14 9 views
9

Wir haben eine erweiterte Webseite (ASP.NET, C#) und eine Anwendung, die auf dem Clientcomputer installiert werden muss, um die Webseite in vollen Zügen zu nutzen. Die Anwendung ist eine Tray-App und hat hauptsächlich zwei Aufgaben. Erkennen, wenn bestimmte Ereignisse auf dem Webserver passieren (z. B. Einladung zu einem Meeting oder Benachrichtigung eines bevorstehenden Meetings). Die andere Aufgabe, die die Trayapp hat, ist, ein benutzerdefiniertes Protokoll (trayapp: //) zu verwenden, um einige Ajax-Aufrufe zurück zum Server durchzuführen.Erkennen von Browser, wenn bestimmte Anwendung installiert ist

Ein Problem, das wir haben, ist, wie man feststellen kann, ob die Anwendung auf dem lokalen Rechner installiert ist oder nicht. Jetzt muss der Benutzer ein Häkchen setzen, um die Website darüber zu informieren, dass die Anwendung installiert ist, und dass es sicher ist, die Trayapp: // URL-Aufrufe aufzurufen.

Gibt es eine Möglichkeit, zum Beispiel durch ein JavaScript o.ä. festzustellen, ob unsere Anwendung auf dem lokalen Rechner installiert ist?

Die Überprüfung muss für IE, FF und Opera Browser funktionieren.

Antwort

5

Wenn Sie mit Javascript innerhalb des Browsers erkennen möchten, können Sie wahrscheinlich die Sammlung "navigator.plugins" verwenden. Es funktioniert mit Firefox, Opera und Chrome, aber leider nicht mit IE.

Update: In FF, Opera und Chrome können Sie es testen leicht wie folgt aus:

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

Update # 2: Wenn es ein ActiveX-Objekt in IE ist, dass Sie testen können, ob es etwas unter Verwendung existiert dies wie:

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

Ein weiterer Ansatz für IE etwas ähnliches ist, was JohnFx vorgeschlagen (ich fand es here und habe es nicht getestet):

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

vielleicht in IE kann er versuchen, ein CreateObject() eines registrierten ActiveX auch von Javascript, um zu überprüfen, ob die Anwendung installiert ist –

5

Bei der Installation Ihrer clientseitigen App können Sie die Browserkonfiguration ändern, um einen weiteren Anforderungsheader in HTTP-Anforderungen aufzunehmen und dann den Servercode nach diesem Header suchen, z. B. als unterstützten Mime-Typ mit dem folgenden Registrierungsschlüssel (z Internet Explorer)

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

ich bin nicht sicher, ob Opera und FF diese denselben Schlüssel verwenden, aber sie haben wahrscheinlich ähnliche Konfigurationsmöglichkeiten, aber dies zumindest sollte man auf dem richtigen Weg zu bekommen.

+1

ich in diesem Ansatz sehr interessiert bin, aber kann keine klare Anweisung finden, wie . Haben Sie ein Beispiel dafür, wie dies browserübergreifend eingestellt werden kann? –

1

Gute Idee von @JohnFx.

Eine andere Möglichkeit, dies zu beheben, wäre die Installation eines ActiveX-Steuerelements oder Browser-Plug-Ins mit der Trayapp-Installation. Sie können dann ähnlich wie beim Überprüfen der verfügbaren Flash-Version darauf zugreifen.

0

Setzen Sie die Trayapp (als Managed-App vorausgesetzt) ​​als COM-Objekt aus. Sie könnten dann das Tag mit der GUID und Trap-Fehler verwenden, wenn es nicht gefunden wird, oder das ActiveX-Objekt mit dem Progid verwenden, um festzustellen, ob es installiert ist.

2

Nun die Methode, die von "einige" erwähnt wurde, ist sehr üblich, aber es gibt auch andere Methoden zum Beispiel, wenn die Anwendung lokal auf einem Port hört es aus dem Browser erkannt werden kann, die für Sicherheitslösungen sehr üblich ist, weil einige haben Art von lokalem Proxy, um den Verkehr zu filtern.Ich habe tatsächlich ein Video vor einer Weile über diese Technik verwendet Avast Antivirus zu erkennen, können Sie es hier sehen:

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

+0

Das sieht nach einer guten Idee aus. Wie kann die Tray-App einen Port abhören und Anfragen bearbeiten? – xr280xr

+1

Es kann einfach einen Socket auf einem zertifizierten Port öffnen und ein Image bereitstellen, wenn Sie das Image laden können, dann ist die Anwendung da. Auch kann es mit json antworten und einer bestimmten Domäne erlauben, diese json zu lesen. –

+0

Danke. Es sieht aus wie [HttpListener] (https://msdn.microsoft.com/en-us/library/system.net.httplistener (v = vs.110) .aspx) Klasse könnte hier auch nützlich sein. – xr280xr

Verwandte Themen