2015-02-18 9 views
9

Stack Overflown zadawane w this question:uruchamianie aplikacji jeżeli zainstalowany lub przekierować do pobrania - okna

Na każdym repo, GitHub posiada przycisk, który jest oznaczony jako "Clone w Desktop" (Przykład: https://github.com/github/developer.github.com). Jeśli masz zainstalowany GitHub for Mac na komputerze , to href jest podobny do "github-mac: // openRepo/https://github.com/github/developer.github.com". To otwiera GitHub na Maca i oferuje klonowanie repozytorium. Jeśli nie, href to "http://mac.github.io". To jest strona pobierania dla GitHub dla komputerów Mac. Chciałbym zrobić coś podobnego na mojej stronie: otwórz moją aplikację , jeśli jest zainstalowana i przekieruj do pobrania, jeśli nie. Jak to może być najlepsze zrealizowane?

Odpowiedź była o Github Conduit, ale, o ile wiem, Github Conduit jest tylko dla Github for Mac.
Mam to samo pytanie, tylko dla systemów operacyjnych Windows. W jaki sposób GitHub wie, czy GitHub jest zainstalowany na komputerze, czy nie?


Jak deepcurious powiedział w their answer, musimy użyć następującego kodu, który sprawdza, czy protokół jest zarejestrowany:

$("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(); 
}); 

i mam poniższy link 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> 

Jeśli aplikacja jest zainstalowana, Google Chrome przesyła mi żądanie protokołu zewnętrznego (poniżej), więc zakładam, że powinien działać (chociaż nie robi nic na moim komputerze). Ale jeśli aplikacja nie jest zainstalowana, nie przechodzi na stronę data-href-alt.

Na przykład, jeśli zmienię github-windows:// na some-uninstalled-app:// we wszystkich przypadkach w kodzie, łącze nic nie zmieni.

Google Chrome's External Protocol Request

+0

Po prostu zgaduję, ale wiem, jak działają niestandardowe procedury obsługi protokołów, może po prostu dowiadują się, czy obsługiwany jest niestandardowy protokół. Jeśli tak, uruchomi się jego aplikacja. Jeśli nie, przekierowuje. Więc twoje pytanie sprowadza się do tego, jak znaleźć, czy dany niestandardowy protokół ma zainstalowany program obsługi. Zobacz https://stackoverflow.com/questions/24779312/simplest-cross-browser-check-if-protocol-handler-jest- zarejestrowany – sashoalm

+0

http://stackoverflow.com/questions/836777/how-to-detect-browsers -protocol-handlers –

+0

Myślę, że to może należeć do [WebApps] (http://webapps.stackexchange.com). możesz mieć więcej szczęścia! ':)' – sircapsalot

Odpowiedz

1

To prawda, GitHub Conduit jest tylko dla GitHub for Mac. W jaki sposób witryna GitHub określa, czy GitHub dla Windows jest zainstalowany?

Cóż, GitHub dla Windows jest podobno znacznie mniej wyrafinowany pod tym względem. "Klon na pulpicie" działa tylko po zainstalowaniu GitHub dla Windows i uwierzytelnieniu konta za pomocą przycisku "Dodaj konto" w opcjach.

add account

Gdy już to zrobisz, tak długo jak jesteś zalogowany na koncie GitHub dodanego do GitHub for Windows, w „Clone w pulpitu” link będzie miał protokół github-windows:// zamiast linku https://windows.github.com/ .

clone in desktop

Ale co się stanie, jeśli się zalogować do GitHub na komputerze, który nie ma GitHub for Windows zainstalowany i kliknij przycisk? Ma to samo łącze, które nie działa z oczywistych powodów.

protocol no understood

Tak, GitHub najwyraźniej ślepo zakłada, że ​​gdy korzystasz z konta na komputerze z systemem Windows, musisz mieć GitHub for Windows zainstalowane.

+0

Dziękuję, jest to bardzo przydatne. Ale czy jest możliwe, aby taki system działał w systemie Windows, tak jak w Mac OS? – 416E64726577

+0

@ 010000010110111001100100011100 Oczekuję, że możesz. Nie wiem, dlaczego GitHub zdecydował się zrobić to inaczej w systemie Windows i Mac. –

1

Można spróbować Protokołu niestandardowe biblioteki wykrywania różnych przeglądarkach, co jest napisane w JavaScript:

... albo zrobić coś hacky jak modyfikację agenta użytkownika przeglądarki podczas instalacji aplikacji.

Powiązane problemy