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.
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
http://stackoverflow.com/questions/836777/how-to-detect-browsers -protocol-handlers –
Myślę, że to może należeć do [WebApps] (http://webapps.stackexchange.com). możesz mieć więcej szczęścia! ':)' – sircapsalot