2011-08-17 21 views

Respuesta

47

Chrome 13 ahora es compatible con la API navigator.registerProtocolHandler. Por ejemplo,

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

en cuenta que su nombre de protocolo tiene que empezar con web+, con algunas excepciones para los más comunes (como mailto, etc). Para obtener más detalles, consulte: http://updates.html5rocks.com/2011/06/Registering-a-custom-protocol-handler

+5

+1 por el hecho de que los protocolos deben comenzar con web + para evitar "SECURITY_ERR: DOM Exception 18" – Catch22

+3

Cómo 'torrent:' y 'steam:' funcionan los enlaces entonces? ¿Las aplicaciones empaquetadas de Chrome también tienen esta restricción? –

+0

@StevenRoose Por lo que puedo decir, Chrome los pasa al sistema operativo. Incluso utilizando la API 'chrome.webNavigation', los enlaces' tel: 'nunca se informan. – PixnBits

4

Así es como lo hice. Su aplicación necesitaría instalar unas pocas claves de registro en la instalación, luego, en cualquier navegador, puede simplemente vincularlo a foo: \ anythingHere.txt y abrirá su aplicación y le pasará ese valor.

Este no es mi código, solo algo que encontré en la web al buscar la misma pregunta. Simplemente cambie todo "foo" en el texto a continuación al nombre de protocolo que desee y cambie también la ruta a su exe.

(ponga esto en un archivo de texto como guardar como foo.reg en su escritorio, luego haga doble clic para instalar las claves) ----- Debajo de esta línea se encuentra el archivo .reg (NO incluye esto línea) ------

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

Esto no funciona en Chrome, que era la pregunta específica. –

+0

@KjetilWatnedal: Funciona bien en Chrome (al menos en v40 +) y con esta solución.En relación con la pregunta inicial, OP quería que el navegador enviara algo a un sitio de manera automática, aparentemente sin una aplicación de controlador local, que de hecho puede no ser posible. –

+0

Esto no funciona en la versión 43+ de Chrome – YumYumYum

18

Esta pregunta es viejo ahora, pero ha habido una reciente actualización a Chrome (al menos en las aplicaciones empaquetadas se refiere) ...

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

y

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

Le permite registrar un controlador para una URL (siempre y cuando la tenga). Lamentablemente, no myprotocol://, pero al menos puede hacer http://myprotocol.mysite.com y puede crear una página web que apunta a las personas a la aplicación en la tienda de aplicaciones.

+0

¡Muchas gracias por esta respuesta! A diferencia de la respuesta más votado, ¡en realidad responde la pregunta! –

+1

Sus enlaces están rotos. ¿Puede por favor proporcionar la solución correcta? – YumYumYum

+1

Google refactored el repositorio, ahora he actualizado el enlace. –

44

El siguiente método registra una aplicación en un Esquema de URI. Por lo tanto, puede usar mycustproto: en su código HTML para activar una aplicación local. Funciona en una versión de Google Chrome 51.0.2704.79 m (64 bits).

Utilizo principalmente este método para imprimir documentos en silencio sin que aparezca el cuadro de diálogo de impresión. El resultado es bastante bueno y es una solución perfecta para integrar la aplicación externa con el navegador.

código HTML (simple):

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

código HTML (alternativa):

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

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

Esquema URI se verá así:

Usted puede crear el esquema URI manualmente en el registro, o ejecute el "mycustpro archivo.reg "(ver a continuación).

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" 

ejemplo mycustproto.reg:

C# aplicación de consola - 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(); 
    } 
    } 
} 

intenta ejecutar el programa primero para asegurarse de que el programa se ha colocado en la ruta correcta:

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

Haga clic en el enlace en su página HTML:

verá una ventana emergente de alerta por primera vez.

enter image description here

para restablecer la configuración en Chrome controlador externo protocolo:

Si alguna vez ha aceptado el protocolo personalizado en Chrome y desea restablecer la configuración, hacer esto (en la actualidad, no existe sin interfaz de usuario en Chrome para cambiar la configuración):

Editar "Estado local" este archivo en esta ruta:

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

o simplemente ir a:

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

Entonces, la búsqueda de esta cadena: protocol_handler

verá el protocolo personalizado a partir de ahí.

Nota: Cierre su Google Chrome antes de editar el archivo. De lo contrario, el cambio que ha realizado será sobrescrito por Chrome.

Referencia:

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

+0

esto parece prometedor, ¿puedo utilizar este enfoque para imprimir desde una tableta. si es así, cómo lidiar con el registro, etc. en ese caso – Venkat

+1

@Venkat, creo que es mejor especificar primero el nombre de la tableta y el sistema operativo (por ejemplo: Surface, iPad, etc.) y ver si otros lo han hecho antes. La solución que publiqué fue para Windows. He visto la configuración similar para OS X y Linux. Sin embargo, no tenía este dispositivo/entorno a mano para experimentar. Puedes probarlo en Windows primero para obtener la idea básica de cómo funciona. Espero que esto sea de ayuda. –

+0

Para el registro, fundé la opción de configuración * protocol_handler * en el archivo 'Preferences', ubicado en'% localappdata% \ Google \ Chrome \ User Data \ Default' – Babblo

Cuestiones relacionadas