如果安装了特定应用程序,则从浏览器中检测

Fro*_*rud 9 javascript asp.net ajax web-applications

我们有一个高级网页(ASP.NET,C#),以及需要在客户端计算机上安装的应用程序,以便充分利用网页.该应用程序是一个托盘应用程序,主要有两个任务.检测网络服务器上发生某些事件的时间(例如邀请参加会议或通知即将举行的会议).trayapp的另一个任务是使用自定义协议(trayapp://)来执行一些ajax调用回服务器.

我们遇到的一个问题是如何确定应用程序是否安装在本地计算机上.现在,用户必须勾选一个复选框以通知网站应用程序已安装,并且可以安全地调用trayapp:// url调用.

有没有办法,例如通过JavaScript或类似方法来检测我们的应用程序是否安装在本地计算机上?

该检查需要适用于IE,FF和Opera浏览器.

Joh*_*nFx 6

安装客户端应用程序时,您可以修改浏览器配置以在HTTP请求中包含另一个请求标头,然后让服务器代码查找该标头,例如使用以下注册表项作为支持的mime类型(对于Internet Explorer)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
                                                      Internet Settings\Accepted Documents
Run Code Online (Sandbox Code Playgroud)

我不确定Opera和FF是否使用相同的密钥,但它们可能有类似的配置选项,但这至少应该让你走上正轨.


som*_*ome 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
}
Run Code Online (Sandbox Code Playgroud)

更新#2:如果它是IE中的ActiveX对象,您可以使用以下内容测试它是否存在:

function getActiveXObject(name){
        try{
            return new ActiveXObject(name);
        }
        catch(err){
            return undefined;
        }
};
Run Code Online (Sandbox Code Playgroud)

IE的另一种方法类似于JohnFx建议的方法(我在这里找到它并且没有测试它):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Internet
Settings\User Agent\Post Platform
Run Code Online (Sandbox Code Playgroud)