2015-02-18 7 views
9

Stack Overflown chiesto in this question:lancio applicazione se installato o reindirizzare per scaricare - finestre

Su ogni repo, GitHub ha un pulsante con l'etichetta "Clone in Desktop" (esempio: https://github.com/github/developer.github.com). Se hai installato GitHub per Mac, l'href è qualcosa come "github-mac: // openRepo/https://github.com/github/developer.github.com". Questo apre GitHub per Mac e offre di clonare il repository. Se non lo fai, l'href è "http://mac.github.io". Questa è una pagina di download per GitHub per Mac. Mi piacerebbe fare qualcosa di simile sul mio sito web: apri la mia app se installata e reindirizza per il download in caso contrario. Come può essere la cosa migliore da fare ?

La risposta era di circa Github Conduit, ma, per quanto ne so, Github Conduit è solo per Github for Mac.

Ho la stessa domanda, solo per i sistemi operativi Windows. Come fa GitHub a sapere se GitHub è installato su un computer o no?


Come deepcurious detto in their answer, abbiamo bisogno di utilizzare il seguente codice che controlla se un protocollo è iscritto:

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

e ho il seguente 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> 

Se l'app è installata, Google Chrome mi fornisce una richiesta di protocollo esterno (di seguito), quindi presumo che dovrebbe funzionare (anche se non fa nulla sul mio computer). Ma, se l'app non è installata, non va alla pagina data-href-alt.

Ad esempio, se cambio github-windows:// in some-uninstalled-app:// in tutte le istanze nel codice, il collegamento non fa nulla.

Google Chrome's External Protocol Request

+0

Sto solo supponendo, ma sapendo come funzionano i gestori di protocolli personalizzati, forse si scopre solo se il suo protocollo personalizzato è gestito. Se sì, la sua app inizierà. Se no, reindirizza. Quindi la tua domanda si riduce a come trovare se un determinato protocollo personalizzato ha un gestore installato per esso. Vedi https://stackoverflow.com/questions/24779312/simplest-cross-browser-check-if-protocol-handler-is-registered – sashoalm

+0

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

+0

Penso che questo possa appartenere a [WebApps] (http://webapps.stackexchange.com). potresti avere più fortuna lì! ':' – sircapsalot

risposta

1

E 'vero, GitHub Conduit è solo per GitHub for Mac. In che modo il sito Web GitHub determina se GitHub per Windows è installato?

Bene, GitHub per Windows è apparentemente molto meno sofisticato in questo senso. Il "Clone in Desktop" funzionerà solo dopo aver installato GitHub per Windows e autenticato il tuo account utilizzando il pulsante "Aggiungi account" sotto le opzioni.

add account

Una volta che avete fatto questo, fino a quando si è connessi al conto GitHub aggiunto a GitHub for Windows, il "Clone in Desktop" collegamento avrà il protocollo github-windows://, piuttosto che il link https://windows.github.com/ .

clone in desktop

Ma cosa succede se si accede a GitHub su un computer che non dispone di GitHub for Windows installato e fare clic sul pulsante? Ha lo stesso link, che non funzionerà per ovvi motivi.

protocol no understood

Sì, a quanto pare GitHub assume ciecamente che quando si sta usando il tuo account su un computer Windows, è necessario disporre di GitHub for Windows installato.

+0

Grazie, questo è molto utile. Ma è possibile fare in modo che uno schema di questo tipo funzioni in Windows, come fa in Mac OS? – 416E64726577

+0

@ 010000010110111001100100011100 Mi aspetto che tu possa. Non so perché GitHub abbia scelto di farlo in modo diverso tra Windows e Mac. –

1

È possibile provare la libreria di rilevamento protocollo personalizzato cross-browser che è scritto in JavaScript:

... o fare qualcosa hacky come modificare user agent del browser durante l'installazione dell'applicazione.