103 votes

Gestionnaire de protocole personnalisé dans chrome

Comment puis-je configurer un gestionnaire de protocole personnalisé dans Chrome ? Quelque chose comme :

monprotocole://testfile

J'en aurais besoin pour envoyer une requête à http://example.com?query=testfile puis envoyer la réponse http à mon extension.

0 votes

Je ne pense pas que Chrome prenne actuellement en charge cette fonctionnalité, car il dispose d'un ensemble assez limité d'API pour les extensions.

95voto

Jun Xie Points 986

La méthode suivante permet d'enregistrer une application à un schéma URI. Ainsi, vous pouvez utiliser moncustproto : dans votre code HTML pour déclencher une application locale. Il fonctionne sur un Google Chrome Version 51.0.2704.79 m (64-bit).

J'ai principalement utilisé cette méthode pour imprimer un document en silence sans que la boîte de dialogue d'impression n'apparaisse. Le résultat est assez 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 (alternatif) :

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

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

Le schéma de l'URI ressemblera à ceci :

Vous pouvez créer le schéma 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"

exemple de moncustproto.reg :

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# - monprogramme.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 d'abord d'exécuter le programme 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 apparaître une fenêtre d'avertissement 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 que vous souhaitez réinitialiser le paramètre, procédez comme suit (actuellement, il n'existe pas d'interface utilisateur dans Chrome pour modifier le paramètre) :

Edit " État local " 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 : gestionnaire de protocole

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

Note : Veuillez fermer votre Google Chrome avant de modifier le fichier. Sinon, la modification que vous avez apportée sera écrasée par Chrome.

Référence :

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

0 votes

Cela semble prometteur, puis-je utiliser cette approche pour imprimer à partir d'une tablette ? si oui, comment gérer le registre, etc. dans ce cas ?

1 votes

@Venkat Je pense qu'il est préférable de spécifier le nom de la tablette et le système d'exploitation en premier (ex : Surface, iPad, etc) et de voir si d'autres l'ont déjà fait. La solution que j'ai postée était pour Windows. J'ai vu des réglages similaires pour OS X et Linux. Cependant, je n'avais pas ces appareils/environnements à portée de main pour expérimenter. Vous pouvez d'abord l'essayer sur Windows pour avoir une idée de base de son fonctionnement. J'espère que cela vous aidera.

3 votes

Pour mémoire, j'ai fondé le gestionnaire de protocole option de configuration dans Preferences situé à l'adresse %localappdata%\Google\Chrome\User Data\Default

55voto

Boris Smus Points 4347

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

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

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

6 votes

+1 pour le fait que les protocoles doivent commencer par web+ pour éviter "SECURITY_ERR : DOM Exception 18".

4 votes

Comment torrent: et steam: Les liens fonctionnent alors ? Les applications packagées de Chrome présentent-elles également cette restriction ?

1 votes

@StevenRoose D'après ce que je sais, Chrome les transmet au système d'exploitation. Même en utilisant le chrome.webNavigation API, tel: Les liens ne sont jamais signalés.

33voto

Gordon Williams Points 360

Cette question est maintenant ancienne, mais il y a eu 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 (pour autant que vous en soyez le propriétaire). Malheureusement, aucun myprotocol:// mais au moins vous pouvez faire http://myprotocol.mysite.com et vous pouvez y créer une page web qui renvoie les gens vers l'application dans le magasin d'applications.

12voto

MuffinMan Points 9

C'est comme ça que j'ai fait. Votre application devrait installer quelques clés de registre à l'installation, puis dans n'importe quel navigateur vous pouvez simplement faire un lien vers foo : \anythingHere.txt et il ouvrira votre application et lui passera cette valeur.

Ce n'est pas mon code, juste quelque chose que j'ai trouvé sur le web en cherchant la même question. Changez simplement tous les "foo" dans le texte ci-dessous par le nom du protocole que vous voulez et changez le chemin de votre exe aussi.

(mettez ceci dans un fichier texte et enregistrez sous foo.reg sur votre bureau, puis double-cliquez dessus pour installer les clés) -----La ligne suivante est insérée dans le fichier .reg (NE PAS inclure cette ligne) ------

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 votes

Cela ne fonctionne pas dans Chrome, ce qui était la question spécifique.

1 votes

@KjetilWatnedal : Cela fonctionne bien dans Chrome (au moins dans la v40+) et avec cette solution. En rapport avec la question initiale, OP voulait que le navigateur soumette quelque chose à un site automatiquement, apparemment sans application de gestionnaire local, ce qui, en effet, peut ne pas être possible.

7 votes

Je veux que tout le monde sache que sa solution fonctionne effectivement dans Chrome (testé aujourd'hui dans 49.0.2623.87). Cependant, j'ai constaté que si vous tapez ce protocole directement dans le navigateur (foo://C:/test.txt), vous devrez peut-être utiliser ctrl+enter car le navigateur ne reconnaît pas immédiatement le protocole et le protocole de recherche intercepte l'action avant que le système d'exploitation ne le fasse. En revanche, l'insertion dans un lien fonctionne correctement.

2voto

Peter Schober Points 29

Je ne suis pas sûr que ce soit le bon endroit pour ma réponse, mais comme j'ai trouvé très peu de fils utiles et que celui-ci en faisait partie, je publie ma solution ici.

Problème : Je voulais que Linux Mint 19.2 Cinnamon ouvre Evolution quand on clique sur mailto dans Chromium. Gmail a été enregistré comme gestionnaire par défaut dans chrome://settings/handlers et je ne pouvais pas choisir un autre gestionnaire.

Solution : Utiliser le xdg-settings dans la console

xdg-settings set default-url-scheme-handler mailto org.gnome.Evolution.desktop

La solution a été trouvée ici https://alt.os.linux.ubuntu.narkive.com/U3Gy7inF/kubuntu-mailto-links-in-chrome-doesn-t-open-evolution et adapté à mon cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X