with tutorial made hechas framework electronjs con app aplicaciones javascript node.js cross-platform

javascript - tutorial - Cómo registrar un controlador de protocolo url en Node.js



made with electron js (3)

Estoy desarrollando un módulo de nodo de línea de comandos y me gustaría poder iniciarlo a través de enlaces en un sitio web.

Quiero registrar un protocolo personalizado my-module:// modo que los enlaces tengan el siguiente formato: my-module://action:some-action y al hacer clic en ellos se iniciará el paquete del nodo.

Si no hay una API de nodo para esto (estoy seguro de que no lo habrá), ¿hay alguna manera de hacerlo desde un nodo invocando comandos del sistema?

Debe funcionar en Windows, Linux y MacOS.


Así es como lo hice en Mac OS con una aplicación NW.js:

  1. Abra la aplicación /Applications/Utilities/Script Editor

    escribe el siguiente código en el editor

    on open location this_URL do shell script "/Applications/X.app/Contents/MacOS/x ''" & this_URL & "''" end open location

    Reemplace X por el nombre de su aplicación.

    Guarde el script como un paquete de aplicaciones en cualquier lugar

  2. Vaya a la secuencia de comandos, haga clic con el botón derecho y luego '' Mostrar contenido del paquete '', luego edite Contents/info.plist

    Agregue estas líneas al final del archivo, justo antes de </dict></plist> :

    <key>CFBundleIdentifier</key> <string>com.mycompany.AppleScript.AppName</string> <!-- edit here --> <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>AppName</string> <!-- edit here --> <key>CFBundleURLSchemes</key> <array> <string>myurlscheme</string> <!-- your url scheme here --> </array> </dict> </array>

  3. Ahora puede abrir un enlace que comienza con myurlscheme: ¡ y verá que su aplicación se está abriendo!


En primer lugar, crear tu propio protocolo es una locura, no hagas eso.

Parece que todo lo que quieres hacer es poder lanzar tu paquete de nodos desde un navegador web. La forma normal de iniciar un programa externo desde un navegador web es escribir un complemento del navegador.

Así es como se lanzan pdf, torrents, iTunes desde tu navegador.

Entonces, en resumen, para hacer lo que quieras, tendrás que escribir un complemento y conseguir que tus usuarios instalen. No es particularmente una buena idea, diría yo.


Es una idea interesante. No creo que exista actualmente una solución multiplataforma node.js. Me encontré con este hilo de personas que piden lo mismo:

https://github.com/rogerwang/node-webkit/issues/951

Electron ahora lo admite con la API app.setAsDefaultProtocolClient ( desde v0.37.4 ) para macOS y Windows.

No sería terriblemente difícil escribir la biblioteca para hacer esto.

Windows :

En el lado de las ventanas, tendría que registrar la aplicación como la aplicación que maneja ese esquema de URI.

Tendrá que configurar una entrada de registro para su aplicación:

HKEY_CLASSES_ROOT alert (Default) = "URL:Alert Protocol" URL Protocol = "" DefaultIcon (Default) = "alert.exe,1" shell open command (Default) = "C:/Program Files/Alert/alert.exe" "%1"

Luego, cuando su aplicación se ejecute en Windows, debería poder ver los argumentos en process.argv[] . Asegúrese de iniciar un shell para ejecutar el nodo, no solo su aplicación directamente.

Artículo original de MSDN

Tenga en cuenta que esto requiere privilegios de administrador y establece el controlador en todo el sistema. Para hacerlo por usuario, puedes usar HKEY_CURRENT_USER/Software/Classes lugar, como lo hace la implementación de Electron.

Manzana:

El artículo "OS X" citado en el comentario de github es en realidad para iOS. Me gustaría consultar la siguiente guía de programación para obtener información sobre el registro de una aplicación para manejar un esquema de URL:

Documentación de Apple Dev

En resumen, deberá crear un servicio de inicio y completar el archivo .plist con los CFBundleURLTypes recurso CFBundleURLTypes , este campo es una matriz y se debe completar solo con el nombre del protocolo, es decir, http

La siguiente pregunta de superusuario tiene una mejor solución, pero es una configuración por usuario.

"El archivo que busca es ~ / Library / Preferences / com.apple.LaunchServices.plist.

Contiene una matriz llamada LSHandlers, y los elementos secundarios del Diccionario que definen un LSHandlerURLScheme pueden modificarse en consecuencia con el LSHandlerRole ".

Linux:

Por lo que puedo decir, hay varias formas de lograr esto en Linux (¿sorpresa?)

Gnome tiene una herramienta que te permitirá registrar un manejador de url w3 archives

gconftool-2 -t string -s /desktop/gnome/url-handlers/tel/command "bin/vonage-call %s" gconftool-2 -s /desktop/gnome/url-handlers/tel/needs_terminal false -t bool gconftool-2 -t bool -s /desktop/gnome/url-handlers/tel/enabled true

Parece que algunos de los administradores de peso más ligero le permiten crear tipos de mimos falsos y registrarlos como controladores de protocolo URI.

"Los tipos mime falsos se crean para los URI con varios esquemas como este: application / x-xdg-protocol: las aplicaciones que soportan el protocolo URI específico pueden agregar el tipo mime falso a su clave MimeType en sus archivos de entrada del escritorio. Así que es fácil de encontrar todas las aplicaciones instaladas en el sistema que soportan un esquema de URI buscando en el archivo mimeinfo.cache. De nuevo, el archivo defaults.list se puede usar para especificar un programa predeterminado para el tipo de URI especificado ". wiki.lxde.org

KDE también admite su propio método de manejo de controladores de protocolo de URL:

Cree un archivo: $KDEDIR/share/services/your.protocol y $KDEDIR/share/services/your.protocol con datos relevantes:

[Protocol] exec=/path/to/player "%u" protocol=lastfm input=none output=none helper=true listing= reading=false writing=false makedir=false deleting=false

Desde los foros de last.fm de todos los lugares.

Espero que ayude.