如何检测浏览器的协议处理程序?

93

我已经创建了一个自定义URL协议处理程序。

http://

mailto://

custom://

我已经注册了一个WinForms应用程序来做出相应的反应,一切都很好。

但是我希望在用户尚未安装自定义URL协议处理程序时能够优雅地处理这种情况。

为了能够做到这一点,我需要能够检测浏览器的已注册协议处理程序,我认为可以通过JavaScript来实现。但是我一直无法找到一种轮询信息的方法。我希望能够找到解决这个问题的方法。

感谢您可能能够分享的任何想法。


5
我认为这只有在Chrome浏览器的代码中(例如XPCOM,ActiveX等)才可能实现。否则,这将是一个隐私问题(“我们检测到您使用Eudora。立即切换到FooMail!”)。但请澄清您感兴趣的浏览器/操作系统是什么。 - Matthew Flaschen
1
好的观点,但我很高兴知道有东西被注册来处理我的专有协议acsfs://Windows IE,FireFox,最好是Safari - Chris Craft
你已经解决了这个问题了吗? - jstuardo
13个回答

1
您说您需要检测浏览器的协议处理程序 - 您真的需要吗?
如果您像从sourceforge下载文件时发生的那样做些什么呢?假设您想打开myapp:// something。而不是简单地创建指向它的链接,请创建一个链接到通过HTTP访问的另一个HTML页面。然后,在该页面上,说明您正在尝试为他们打开应用程序。如果不起作用,则他们需要安装您的应用程序,他们可以通过点击您提供的链接来完成。如果它起作用了,那么您就准备好了。

6
建议这不会有用是没有帮助的。对我来说,显然能够有条件地显示启动或下载链接,甚至在单击链接时有条件地启动或下载,将比告诉用户他们需要先安装更好地提高用户体验。 - StuartQ

0

这是另一种hacky方案,需要对您的应用程序进行(希望轻微的)修改,以在启动时“电话回家”。

  1. 用户点击链接,尝试启动应用程序。在链接中放入唯一标识符,以使其在启动时传递给应用程序。Web应用程序显示旋转器或类似的内容。
  2. 然后,Web页面开始检查具有相同唯一ID的应用程序的“应用程序电话回家”事件。
  3. 启动时,您的应用程序向Web应用程序执行HTTP post操作,其中包含唯一标识符,以指示存在。
  4. Web页面要么看到应用程序已经启动,要么继续使用“请下载”页面。

0

这不是一个简单的任务;一个选项可能是使用签名代码,您可以利用它来访问注册表和/或文件系统(请注意,这是一个非常昂贵的选项)。此外,没有统一的API或代码签名规范,因此您需要为每个目标浏览器生成特定的代码。这将是一个支持噩梦。

此外,我知道游戏内容交付系统Steam似乎也没有解决这个问题。


2
签名代码应该由与处理自定义://的应用程序一起安装的证书签名,因此不需要由类似于Verisign的人签署的非常昂贵的应用程序证书。 - WhyNotHugo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接