Question

Comment utiliser le navigateur en tant qu'interface utilisateur pour une application de bureau? Ce que j’ai trouvé jusqu’à présent est ...

  1. Utiliser tout le code HTML / Javascript. Problème: Impossible d’accéder au système de fichiers ou à n’importe quoi d’autre.
  2. Exécuter un serveur Web local pendant l’utilisation de l’application. Problème: Comment puis-je le tuer lorsque l'utilisateur a terminé? Mes utilisateurs ne sont pas assez techniques pour Ctrl + C.
  3. Intégrez un composant de navigateur dans une interface graphique standard. Problème: les composants de navigateur intégrés ont tendance à être au mieux défectueux. La prise en charge de Javascript / CSS n’est jamais aussi bonne que dans un vrai navigateur.
  4. ...?

La solution idéale fonctionnerait avec n'importe quelle technologie. Je sais qu’il existe des options telles que l’écriture d’extensions pour Firefox, mais je souhaite bénéficier d’une totale liberté en ce qui concerne la technologie d’arrière-plan et l’indépendance du navigateur.

Était-ce utile?

La solution

Sous Windows, vous pouvez intégrer le contrôle ActiveX IE, qui utilise le même moteur de rendu que IE. (C'est un avantage et un inconvénient.) Vous pouvez définir la propriété ScriptObject dans votre code hôte et y accéder en Javascript sous window.external pour faire des choses que Javascript ne peut pas faire.

Si vous exécutez un serveur Web local, vous pourriez avoir un lien de sortie dans l'application qui tue l'internaute.

Autres conseils

Veuillez noter que si vous choisissez d'exécuter un serveur Web local, vous créez un risque pour la sécurité.

Toute page Web exécutée sur le même ordinateur et connaissant votre application peut envoyer des requêtes à votre serveur en utilisant Javascript. Vous n'avez donc aucun moyen simple et fiable de connaître l'origine de la requête. (Ne faites pas confiance à l'en-tête referer )

Google Desktop, qui utilise une approche similaire, présente plusieurs vulnérabilités du monde réel qui permettent à toute page Web de lire n’importe quel fichier sur le disque.

Il existe plusieurs moyens de se protéger contre cela. Je recommanderais d'exiger que chaque demande ait une clé d'authentification générée aléatoirement par machine (et expirant à un moment donné), que vous pouvez insérer dans le source des pages réelles. La protection XHR empêcherait les sites Web malveillants de lire la clé d’authentification, les rendant ainsi impuissants.

Si vous recherchez un serveur Web python avec un lien Kill, vous pouvez toujours vérifier CherryPy.

import webbrowser
import cherrypy
import threading

class MyApp:
    """ Sample request handler class. """

    @cherrypy.expose
    def index(self):
        return """<html><head><title>An example application</title></head>
<body>
<h1>This is my sample application</h1>
Put the content here...
<hr>
<a href="/exit">Quit</a>
</body></html>"""

    @cherrypy.expose
    def exit(self):
        raise SystemExit(0)


class MyBGThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.start()

    def run(self):
        cherrypy.tree.mount(MyApp())
        cherrypy.quickstart()

myThread = MyBGThread()
webbrowser.open("http://127.0.0.1:8080")

Ce code est basé sur l'exemple extrait de SingleClickAndRun sur le site Web cherrypy: http://tools.cherrypy.org/wiki/SingleClickAndRun

Notez que dans une application Web normale, vous utiliseriez probablement un moteur de modélisation et chargez des modèles à l'aide de méthodes telles que main.

Ce qui serait bien serait d’incorporer un contrôle de navigateur dans une fenêtre graphique et de fermer le serveur à la fermeture de l’application.

Pour la sécurité, vous pouvez éventuellement ajouter un schéma d’authentification. Cherrypy prend en charge quelques-uns, mais vous pouvez aussi implémenter le vôtre à l’aide de modules d’outils.

Je souhaite faire exactement la même chose (application de bureau utilisant un navigateur HTML5 / CSS3 à jour comme interface graphique de l'application de bureau), uniquement avec Ruby (raisons pour lesquelles j'ai décidé de travailler avec Ruby). C'est incroyable le nombre de bibliothèques multiplateformes que les gens ont créé. Cependant, peu de personnes, voire aucune, n’a fait aucun effort pour faire en sorte que le navigateur Web devienne une interface utilisateur d’application de bureau. Problème de plates-formes croisées… eh bien je ne dirai pas résolu, mais je dirai plusieurs pas dans la bonne direction.

Pour moi, ce serait parfait avec les nouvelles normes HTML5 / CSS3 à venir. Je sais que cela peut être fait avec un serveur Web fonctionnant localement.

Une autre solution pourrait ressembler à la façon dont les gars de «280 North» font ce qu’ils font. Ils ont développé Objective-J (une extension de JavaScript classique qui imite la manière dont Objective-C étend le C normal) et Cappuccino (l’équivalent d’Objective-J du travail de cadre Cocoa d’Objective-C sur MAC). Ils ont également développé «Atlas», la version 280 North de «Interface Builder» d’Apple de Xcode, pour leurs frameworks Objective-J et Cappuccino permettant de créer des applications Internet. Atlas est en réalité une application Web Cappuccino s'exécutant sur votre bureau en tant qu'application de bureau. Dans ce cas, ils utilisent le Narwhal… une plate-forme JavaScript polyvalente et multi-plateformes pour le développement d'applications JS en dehors du navigateur (essentiellement un serveur Web spécialisé).

Si quelqu'un peut avoir l'idée de faire fonctionner «Navigateur, connexion directe à l'application de bureau» sans qu'il soit nécessaire de faire coexister un serveur Web et de manipuler le système de fichiers local, je serais très intéressé… Hmmm ... Maintenant que j'y réfléchis, je me demande si le nouveau projet de Google Chrome «Native Client» peut être utilisé à cette fin. NaCL ressemble beaucoup à Active X, sauf que vous n'êtes pas limité à une plate-forme Windows (mais qu'il sera limité au navigateur Google Chrome, du moins pour le moment). Le Sandboxing offre une sécurité accrue, mais vous pouvez manipuler le système de sécurité local ... Plus j'y pense, plus je commence à penser que cela peut être fait.

Avez-vous des idées?

Vous n'avez pas mentionné le système d'exploitation que vous devrez cibler. Mais vous pourrez peut-être créer un serveur Web statutaire, puis lancer le navigateur par défaut. Attendez que l’utilisateur termine le navigateur, puis arrêtez le serveur Web.

Par exemple, sur Windows, vous pouvez utiliser CreateProcess () pour générer le processus. puis MsgWaitForMultipleObjects () pour attendre la fin de son exécution.

Les applications HTML (HTA, en abrégé) existent depuis un certain temps. Vous pouvez tout savoir à leur sujet ici . Ils sont essentiellement HTML et Javascript avec quelques options supplémentaires pour créer une fenêtre et avec un accès au système de fichiers local. Ils semblent être exactement ce que vous voulez. Il s’agit de la technologie Microsoft. Cela ne fonctionnera donc que sous IE sur les systèmes Windows. J'ai utilisé avec succès cette interface pour un CD-ROM utilisé pour distribuer des logiciels aux étudiants de première année

Une autre option serait d’utiliser Adobe Air. Je ne connais pas très bien cette technologie, mais elle semble fournir un cadre pour déployer des pages Web en tant qu’applications de bureau. Je ne peux pas poster un deuxième lien en tant qu'invité, mais il suffit de le rechercher sur Google et vous le trouverez assez tôt.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top