Java Applet 使用 Chrome 浏览器启动客户端程序的替代方案是什么?

What is the alternatives for Java Applet to launch client programs using Chrome browsers?

我正在使用 ASP.net 和 C# 开发 Web 应用程序。

我的目标是检查客户端计算机上的桌面应用程序。如果它存在,那么我应该启动它。否则如果它不存在,我们应该下载、安装然后启动它。

我可以使用 Java 小程序开发此模块,但不幸的是,Google 决定在 2015 年 9 月禁用 NPAPI,因此小程序将无法在 Chrome 上运行。

我的问题是关于帮助我实现上述场景的 Applet 替代方案?

一旦GoogleChrome第一个宣布不再支持NPAPI,他们也是第一个提供新架构以重写你的代码在他们的浏览器上工作。您可以查看本机消息传递,它“可以使用类似于其他消息传递 API 的 API 与本机应用程序交换消息”。问题是这种方法只适用于Chrome,不是你可以适应其他浏览器的东西。

一个更有用的方法是 FireBreath,它是 post NPAPI 世界中的一个浏览器插件。看看下面一位项目小伙伴的话:

“FireBreath 2 将允许您编写可在 NPAPI、ActiveX 或通过本机消息传递中运行的插件;它即将准备好进入测试版。它没有任何真正的绘图支持,但可以满足您的描述。安装过程有点痛苦,但它有效。本机消息传递组件使用的 FireWyrm 协议可用于任何允许传递文本数据的连接;应该可以让它在 firefox 上与 js-ctypes 一起工作,或者以某种方式在 WEB-RTC 甚至 CORS AJAX 上使用。目前,我们唯一需要解决的问题是 Chrome,但我们采用的方式应该可以很好地移植到其他技术。”

据我所知,唯一(半)可行的选择是为 Chrome 用户提供 link 桌面应用程序的 JNLP 文件。然后 when/if JWS 桌面应用程序启动,让它向服务器报告 'loaded OK' 然后 'target app. installed/not installed'。

在您的服务器上,有一个等待客户端返回报告的超时时间。如果超过了那个时间,则假定客户端机器根本不支持 Java 并且用户正在检查某些 Web 服务以尝试找出是什么应用程序。打开一个 JNLP!

在搜索了实现我的目标的最合适方法后,我认为使用自定义协议 将是从网页访问我的客户端应用程序的一个很好的解决方案。

许多公司都使用此解决方案,例如 Microsoft(使用 mailto: 打开 Outlook 应用程序)Apple(使用 itms: 打开 iTunes 应用程序) .

下面link是一个很好的link里面讲的一个自定义协议: https://support.shotgunsoftware.com/entries/86754-How-to-launch-external-applications-using-custom-protocols-rock-instead-of-http-