我们有一个高级网页(ASP.NET,C#),以及需要在客户端计算机上安装的应用程序,以便充分利用网页。该应用程序是一个托盘应用程序,主要有两个任务。检测网络服务器上发生某些事件的时间(例如邀请参加会议或通知即将举行的会议)。 trayapp的另一个任务是使用自定义协议(trayapp://)来执行一些ajax调用回服务器。
我们遇到的一个问题是如何确定应用程序是否安装在本地计算机上。现在,用户必须勾选一个复选框,通知网站该应用程序已安装,并且可以安全地调用trayapp:// url调用。
有没有办法,例如通过JavaScript或类似方式来检测我们的应用程序是否安装在本地计算机上?
检查需要适用于IE,FF和Opera浏览器。
答案 0 :(得分:6)
安装客户端应用程序时,您可以修改浏览器配置以在HTTP请求中包含另一个请求标头,然后让服务器代码查找该标头,例如使用以下注册表项作为支持的mime类型(用于Internet)资源管理器)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
Internet Settings\Accepted Documents
我不确定Opera和FF是否使用相同的密钥,但它们可能有类似的配置选项,但这至少可以让您走上正确的轨道。
答案 1 :(得分:5)
如果你想在浏览器中使用javascript进行检测,你可以使用集合“navigator.plugins”。它适用于Firefox,Opera和Chrome,但遗憾的是不适用于IE。
更新: 在FF,Opera和Chrome中,您可以像这样轻松地进行测试:
if (navigator.plugins["Adobe Acrobat"]) {
// do some stuff if it is installed
} else {
// do some other stuff if its not installed
}
更新#2: 如果它是IE中的ActiveX对象,您可以使用以下内容测试它是否存在:
function getActiveXObject(name){
try{
return new ActiveXObject(name);
}
catch(err){
return undefined;
}
};
IE的另一种方法类似于JohnFx建议的方法(我发现它here并且没有测试过它):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Internet
Settings\User Agent\Post Platform
答案 2 :(得分:2)
"某些"提到的方法。非常常见,但是还有其他方法,例如,如果应用程序在端口上本地侦听,则可以从浏览器中检测到这种方法,这对于安全解决方案来说非常常见,因为有某种本地代理可以过滤流量。我不久前制作了一段关于使用这种技术检测avast反病毒的视频,你可以在这里观看:
答案 3 :(得分:1)
来自@JohnFx的好主意。
解决此问题的另一种方法是使用trayapp安装来安装ActiveX控件或Browser插件。然后,您可以使用与检查Flash可用版本时类似的方式访问它。
答案 4 :(得分:0)
将trayapp(假设为托管应用程序)公开为COM对象。然后,您可以将标记与GUID一起使用,并在未找到时捕获错误,或者使用带有progid的ActiveX对象来检测它是否已安装。