2011-08-17 10 views

risposta

47

Chrome 13 ora supporta l'API navigator.registerProtocolHandler. Ad esempio,

navigator.registerProtocolHandler(
    'web+custom', 'http://example.com/rph?q=%s', 'My App'); 

Nota che il nome del protocollo deve iniziare con web+, con alcune eccezioni per i più comuni (come mailto, ecc). Per ulteriori dettagli, vedere: http://updates.html5rocks.com/2011/06/Registering-a-custom-protocol-handler

+5

+1 per il fatto che i protocolli devono iniziare con web + per evitare "SECURITY_ERR: DOM Exception 18" – Catch22

+3

Come funzionano i collegamenti 'torrent:' e 'steam:'? Anche le App Packaged di Chrome hanno questa restrizione? –

+0

@StevenRoose Da quello che posso dire, Chrome passa quelli sul sistema operativo. Anche usando l'API 'chrome.webNavigation', i collegamenti' tel: 'non vengono mai segnalati. – PixnBits

4

Ecco come l'ho fatto. La tua app dovrebbe installare alcune chiavi di reg sull'installazione, quindi in qualsiasi browser puoi semplicemente collegarti a foo: \ anythingHere.txt e aprirà la tua app e passerà quel valore.

Questo non è il mio codice, solo qualcosa che ho trovato sul Web durante la ricerca della stessa domanda. Basta cambiare tutti i "foo" nel testo qui sotto al nome del protocollo che vuoi e cambiare il percorso del tuo exe.

(inserire questo in un file di testo come salvato come foo.reg sul desktop, quindi fare doppio clic per installare le chiavi) ----- Sotto questa riga va nel file .reg (NON incluso questo line) ------

REGEDIT4 

[HKEY_CLASSES_ROOT\foo] 
@="URL:foo Protocol" 
"URL Protocol"="" 

[HKEY_CLASSES_ROOT\foo\shell] 

[HKEY_CLASSES_ROOT\foo\shell\open] 

[HKEY_CLASSES_ROOT\foo\shell\open\command] 
@="\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\" \"%1\"" 
+5

Questo non funziona in chrome, che era la domanda specifica. –

+0

@KjetilWatnedal: Funziona bene in Chrome (almeno nella v40 +) e con questa soluzione.In relazione alla domanda iniziale, OP voleva che il browser inviasse automaticamente qualcosa a un sito, apparentemente senza un'applicazione di gestione locale, che in effetti potrebbe non essere possibile. –

+0

Questo non funziona in Chrome versione 43+ – YumYumYum

18

Questa domanda è vecchia ormai, ma c'è stato un recente aggiornamento di Chrome (almeno dove le applicazioni pacchettizzate sono interessati) ...

http://developer.chrome.com/apps/manifest/url_handlers

e

https://github.com/GoogleChrome/chrome-app-samples/tree/master/samples/url-handler

Consente di registrare un gestore per un URL (purché lo possieda). Purtroppo no myprotocol:// ma almeno puoi fare http://myprotocol.mysite.com e puoi creare una pagina web lì che indirizza le persone verso l'app nell'app store.

+0

Grazie mille per questa risposta! A differenza della risposta votata in alto, in realtà risponde alla domanda! –

+1

I tuoi collegamenti sono rotte. Potete per favore fornire una soluzione corretta. – YumYumYum

+1

Google ha refactorato il repository, ora ho aggiornato il collegamento. –

44

Il seguente metodo registra un'applicazione a uno schema URI. Pertanto, puoi utilizzare mycustproto: nel codice HTML per attivare un'applicazione locale. Funziona su Google Chrome versione 51.0.2704.79 m (64 bit).

Principalmente ho utilizzato questo metodo per stampare documenti in modo silenzioso senza che la finestra di dialogo di stampa spuntasse. Il risultato è piuttosto buono ed è una soluzione perfetta per integrare l'applicazione esterna con il browser.

codice HTML (semplice):

<a href="mycustproto:Hello World">Click Me</a> 

codice HTML (in alternativa):

<input id="DealerName" /> 
<button id="PrintBtn"></button> 

$('#PrintBtn').on('click', function(event){ 
    event.preventDefault(); 
    window.location.href = 'mycustproto:dealer ' + $('#DealerName').val(); 
}); 

URI Scheme sarà simile a questa:

È possibile creare lo schema URI manualmente nel registro o eseguire "mycustpro" to.reg "(vedi sotto).

HKEY_CURRENT_USER\Software\Classes 
    mycustproto 
     (Default) = "URL:MyCustProto Protocol" 
     URL Protocol = "" 
     DefaultIcon 
     (Default) = "myprogram.exe,1" 
     shell 
     open 
      command 
       (Default) = "C:\Program Files\MyProgram\myprogram.exe" "%1" 

esempio mycustproto.reg:

C# applicazione console - myprogram.exe:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace myprogram 
{ 
    class Program 
    { 
    static string ProcessInput(string s) 
    { 
     // TODO Verify and validate the input 
     // string as appropriate for your application. 
     return s; 
    } 

    static void Main(string[] args) 
    { 
     Console.WriteLine("Raw command-line: \n\t" + Environment.CommandLine); 
     Console.WriteLine("\n\nArguments:\n"); 

     foreach (string s in args) 
     { 
     Console.WriteLine("\t" + ProcessInput(s)); 
     } 

     Console.WriteLine("\nPress any key to continue..."); 
     Console.ReadKey(); 
    } 
    } 
} 

tenta di eseguire il programma di prima per assicurarsi che il programma è stato inserito nel percorso corretto:

cmd> "C:\Program Files\MyProgram\myprogram.exe" "mycustproto:Hello World" 

Clicca il link nella tua pagina HTML:

verrà visualizzata una finestra di avviso popup per la prima volta.

enter image description here

Per azzerare il gestore di protocollo esterno mettendo in Chrome:

Se avete mai accettato il protocollo personalizzato in Chrome e vorrebbe ripristinare le impostazioni, fare questo (attualmente, non v'è alcuna interfaccia utente in Chrome per modificare l'impostazione):

Modifica "Stato locale" questo file in questo percorso:

C:\Users\Username\AppData\Local\Google\Chrome\User Data\ 

o semplicemente andare a:

%USERPROFILE%\AppData\Local\Google\Chrome\User Data\ 

Poi, ricerca di questa stringa: protocol_handler

vedrete il protocollo personalizzato da lì.

Nota: Chiudi il tuo Google Chrome prima di modificare il file. In caso contrario, le modifiche apportate verranno sovrascritte da Chrome.

Riferimento:

https://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx

+0

questo sembra promettente, posso usare questo approccio per stampare da un tablet. in tal caso, come gestire il registro ecc. in tal caso, – Venkat

+1

@Venkat, penso che sia meglio specificare prima il nome del tablet e il sistema operativo (es: Surface, iPad, ecc.) e vedere se altri lo hanno fatto prima. La soluzione che ho postato era per Windows. Ho visto le impostazioni simili per OS X e Linux. Tuttavia, non avevo questo dispositivo/ambiente a portata di mano per sperimentare. Puoi provarlo prima su Windows per avere un'idea di base su come funziona. Spero che questo ti possa aiutare. –

+0

Per la cronaca, ho fondato l'opzione * protocol_handler * config nel file 'Preferences', che si trova in'% localappdata% \ Google \ Chrome \ Dati utente \ Default'. – Babblo