Chr*_*aft 77 javascript browser protocols moniker
我创建了一个自定义URL协议处理程序.
http://
mailto://
custom://
我已经注册了一个WinForms应用程序来做出相应的响应.一切都很好.
但我希望能够优雅地处理用户尚未安装自定义URL协议处理程序的情况.
为了能够做到这一点,我需要能够检测浏览器的注册协议处理程序,我想从JavaScript.但我一直无法找到一种方法来查询信息.我希望找到解决这个问题的方法.
感谢您提供的任何想法.
scu*_*ffe 32
这将是一个非常,非常 哈克做到这样......但将这项工作?
远非防弹...但它可能会有所帮助?
Eri*_*Law 17
没有很好的跨浏览器方式来做到这一点.在Win8 +上的IE10 +中,新的msLaunchUriapi使您能够启动协议,如下所示:
navigator.msLaunchUri('skype:123456',
function()
{
alert('success');
},
function()
{
alert('failed');
}
);
Run Code Online (Sandbox Code Playgroud)
如果未安装协议,则将触发故障回调.否则,协议将启动,并且将触发成功回调.
我在这里进一步讨论这个主题:http: //blogs.msdn.com/b/ieinternals/archive/2011/07/14/url-protocols-application-protocols-and-asynchronous-pluggable-protocols-oh-my的.aspx
Hug*_*ney 16
HTML5定义了自定义方案和内容处理程序(据我所知,Firefox是迄今为止唯一的实现者),但不幸的是,目前无法检查处理程序是否已经存在 - 它已被提议,但没有后续行动.这似乎是有效使用自定义处理程序的关键功能,我们作为开发人员应该关注此问题以实现它.
jto*_*son 13
似乎没有直接的方法通过javascript来检测已注册协议处理程序的已安装应用程序的存在.
在iTunes模型中,Apple为其服务器提供了URL,然后提供运行某些javascript的页面:
http://ax.itunes.apple.com/detection/itmsCheck.js
因此,iTunes安装程序显然会为主要浏览器部署插件,然后可以检测其存在.
如果您的插件已安装,那么您可以合理地确定重定向到特定于应用程序的URL将成功.
Dav*_*ith 13
您可以使用嵌入式iframe在自定义协议和已知协议(Web或应用商店)之间自动切换,请参阅https://gist.github.com/2662899
Nat*_*tim 10
什么接缝最简单的解决方案是第一次询问用户.
每个示例使用Javascript确认对话框:
You need this software to be able to read this link. Did you install it ?
if yes: create a cookie to not ask next time; return false and the link applies
if false: window.location.href = '/downloadpage/'
Run Code Online (Sandbox Code Playgroud)
我基于自定义协议处理程序将触发一个新窗口将焦点从浏览器中取出的假设,为此问题创建了一个通用库.
https://github.com/ismailhabib/custom-protocol-detection
如果您可以控制正在尝试运行的程序(代码),那么查看用户是否成功运行应用程序的一种方法是:
试图打开自定义的协议之前,请一个AJAX请求到服务器脚本,节省用户的意图在数据库(例如,保存用户名和他想做的事).
尝试打开程序,并传递意图数据.
让程序向服务器发出请求以删除数据库条目(使用intent数据查找正确的行).
让javascript轮询服务器一段时间,看看数据库条目是否已经消失.如果条目消失,您将知道用户成功打开了应用程序,否则该条目将保留(您可以稍后使用cronjob将其删除).
我没有尝试过这种方法,只是想到了.