启动应用程序(如果已安装)或重定向下载 - 窗口

时间:2015-02-18 19:39:25

标签: windows macos github url-scheme github-for-windows

<Stack Overflownthis question中提到了https://github.com/github/developer.github.com

  

在每个repo上,GitHub都有一个标记为“Clone in Desktop”的按钮   (例如:https://github.com/github/developer.github.com)。如果你有   安装了GitHub for Mac,href就像   “github上-MAC:// openRepo / http://mac.github.io”。   这将打开GitHub for Mac并提供克隆回购。如果你不这样做,   href是“Github Conduit”。这是GitHub的下载页面   对于Mac。我想在我的网站上做类似的事情:打开我的   应用程序如果已安装,则重定向即可下载。这怎么可能是最好的   完成?

答案是关于Github for Mac,但据我所知,Github Conduit仅适用于deepcurious

我有同样的问题,仅适用于Windows操作系统。 GitHub如何知道GitHub是否安装在计算机上?


正如their answer中{{3}}所述,我们需要使用以下代码来检查协议是否已注册:

$("a[href*='github-windows://']").click(function(e) {
    var el = $(this);
    setTimeout(function() {
        window.location = el.data("data-href-alt");
    }, 200);

    // once you do the custom-uri, it should properly execute the handler, otherwise, the settimeout that you set before will kick in
    window.location = el.data("href");

    e.preventDefault();
});

我有以下HTML链接:

<a href="github-windows://openRepo/https://github.com/jquery/api.jqueryui.com" data-href-alt="https://www.example.com/app-not-installed">Clone in Desktop</a>

如果已安装该应用,Google Chrome会向我提供外部协议请求(如下所示),因此我认为它应该可以正常工作(尽管它在我的计算机上没有任何功能)。但是,如果未安装该应用,则不会转到data-href-alt页面。

例如,如果我在代码中的所有实例中将github-windows://更改为some-uninstalled-app://,则链接不执行任何操作。

Google Chrome's External Protocol Request

2 个答案:

答案 0 :(得分:1)

这是真的,GitHub Conduit仅适用于Mac的GitHub。那么GitHub网站如何确定是否安装了GitHub for Windows?

嗯,在这方面,GitHub for Windows显然要复杂得多。 &#34;克隆在桌面&#34;仅在您安装GitHub for Windows并使用&#34;添加帐户&#34;对您的帐户进行身份验证后才能运行选项下的按钮。

add account

完成此操作后,只要您登录GitHub帐户,即可添加到GitHub for Windows,&#34; Clone in Desktop&#34;链接将具有github-windows://协议,而不是https://windows.github.com/链接。

clone in desktop

但是如果您在未安装GitHub for Windows的计算机上登录GitHub并单击该按钮会发生什么?它有相同的链接,由于显而易见的原因不起作用。

protocol no understood

是的,GitHub显然盲目地假设当你在Windows计算机上使用你的帐户时,你必须安装GitHub for Windows。

答案 1 :(得分:1)

您可以尝试使用JavaScript编写的跨浏览器自定义协议检测库:https://github.com/ismailhabib/custom-protocol-detection

...或者做一些hacky,比如在安装应用程序期间修改浏览器的用户代理。