web-dev-qa-db-fra.com

Gestionnaire de protocole personnalisé en chrome

Comment configurer un gestionnaire de protocole personnalisé en chrome? Quelque chose comme:

monprotocole: // fichier de test

J'aurais besoin de cela pour envoyer une demande à http://example.com?query=testfile , puis envoyer la httpresponse à mon extension.

69
Test Tester

La méthode suivante enregistre une application dans un schéma d'URI. Vous pouvez donc utiliser mycustproto: dans votre code HTML pour déclencher une application locale. Il fonctionne sur une version de Google Chrome 51.0.2704.79 m (64 bits).

J'ai principalement utilisé cette méthode pour imprimer des documents en mode silencieux sans ouvrir la boîte de dialogue Imprimer. Le résultat est plutôt bon et constitue une solution transparente pour intégrer l'application externe au navigateur.

Code HTML (simple):

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

Code HTML (alternative):

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

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

URI Scheme ressemblera à ceci:

Vous pouvez créer le schéma d'URI manuellement dans le registre ou exécuter le fichier "mycustproto.reg" (voir ci-dessous).

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"

mycustproto.reg exemple:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\mycustproto]
"URL Protocol"="\"\""
@="\"URL:MyCustProto Protocol\""

[HKEY_CURRENT_USER\Software\Classes\mycustproto\DefaultIcon]
@="\"mycustproto.exe,1\""

[HKEY_CURRENT_USER\Software\Classes\mycustproto\Shell]

[HKEY_CURRENT_USER\Software\Classes\mycustproto\Shell\open]

[HKEY_CURRENT_USER\Software\Classes\mycustproto\Shell\open\command]
@="\"C:\\Program Files\\MyProgram\\myprogram.exe\" \"%1\""

Application console C # - 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();
    }
  }
}

Essayez de lancer le programme d'abord pour vous assurer qu'il a été placé dans le bon chemin:

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

Cliquez sur le lien sur votre page HTML:

Vous verrez une fenêtre d'avertissement popup pour la première fois.

 enter image description here

Pour réinitialiser le paramètre du gestionnaire de protocole externe dans Chrome:

Si vous avez déjà accepté le protocole personnalisé dans Chrome et souhaitez réinitialiser le paramètre, procédez comme suit (pour le moment, aucune interface utilisateur Chrome ne permet de modifier le paramètre):

Editez "Local State" ce fichier sous ce chemin:

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

ou simplement aller à:

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

Ensuite, recherchez cette chaîne: protocol_handler

Vous verrez le protocole personnalisé à partir de là.

Remarque: Fermez votre Google Chrome avant de modifier le fichier. Sinon, les modifications que vous avez apportées seront écrasées par Chrome.

Référence:

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

56
Jun Xie

Chrome 13 prend désormais en charge l'API navigator.registerProtocolHandler. Par exemple,

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

Notez que votre nom de protocole doit commencer par web+, avec quelques exceptions pour les plus courantes (comme mailto, etc.). Pour plus de détails, voir: http://updates.html5rocks.com/2011/06/Inscription-a-custom-protocol-handler

50
Boris Smus

Cette question est ancienne maintenant, mais une mise à jour récente de Chrome (du moins en ce qui concerne les applications packagées) ...

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

et

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

Il vous permet d’enregistrer un gestionnaire pour une URL (tant que vous en êtes le propriétaire). Malheureusement, aucun myprotocol://, mais au moins vous pouvez faire http://myprotocol.mysite.com et créer une page Web qui pointe les utilisateurs vers l'application de l'App Store.

24
Gordon Williams

Voici comment je l'ai fait. Votre application aurait besoin d'installer quelques clés reg lors de l'installation. Dans n'importe quel navigateur, vous pouvez simplement créer un lien vers foo:\thingHere.txt. Elle ouvrira votre application et lui transmettra cette valeur.

Ce n'est pas mon code, mais quelque chose que j'ai trouvé sur le Web en cherchant la même question. Il suffit de changer tous les "foo" dans le texte ci-dessous pour le nom de protocole que vous voulez et changer le chemin d'accès à votre exe.

(placez-le dans un fichier texte enregistré sous foo.reg sur votre bureau, puis double-cliquez dessus pour installer les clés) ----- En dessous de cette ligne, vous accédez au fichier .reg. ------

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\"" 
6
MuffinMan

ouvrir 

C:\Users\<Username>\AppData\Local\Google\Chrome\User Data\Default

ouvrez Preferences puis recherchez excluded_schemes vous le trouverez dans 'protocol_handler', supprimez ce (s) schéma (s) exclu (s) pour réinitialiser chrome afin d’ouvrir l’url avec l’application par défaut 

0