Création d’une application Windows avec navigateur embarqué et “hooks” JavaScript

J’ai construit un site Web PHP / JavaScript pour un client. Ensuite, ils m’ont demandé de le répliquer, sauf en tant qu’application Mac autonome. Je l’ai fait avec une application qui combinait un serveur Web intégré, PHP et «WebView» – une version Cocoa-ish du navigateur Web WebKit que je peux incorporer dans une fenêtre d’application standard. Tout cela a bien fonctionné – j’ai pu réutiliser plus de 10 000 lignes de code PHP / JS, ce qui a permis de ne pas réimplémenter le tout en code «natif».

Maintenant, ils veulent un équivalent Windows. Je suis raisonnablement confiant de pouvoir utiliser PHP et le serveur Web. Et je sais que l’intégration de fonctionnalités IE de base est assez facile.

Cependant, dans ma configuration Mac, WebView (via les éléments windowScriptObject) m’a permis d’appeler des méthodes JavaScript à partir de C ++. Par exemple, je pourrais appeler une méthode JavaScript depuis C ++ pour mettre à jour l’écran. De même, je pourrais configurer les choses de manière à ce qu’un appel JavaScript dans le navigateur puisse déclencher une méthode C ++ – je l’ai utilisé par exemple pour laisser un utilisateur cliquer sur “BROWSE” et choisir un chemin de fichier à l’aide d’un navigateur de fichiers standard.

Donc, ma question est la suivante: existe-t-il une configuration de navigateur embarqué basée sur Windows qui me permettrait d’interagir avec JavaScript de la même manière?

(l’interface JavaScript WebKit est décrite de manière beaucoup plus détaillée ici: http://lipidity.com/apple/javascript-cocoa-webkit/ )

Peut-être essayez-vous d’utiliser quelque chose comme Appcelerator Titanium pour être prêt lorsque votre client veut le faire fonctionner sous Linux, iPhone ou Android.

Citant Wikipedia : “Appcelerator Titanium est une plate-forme de développement d’applications mobiles et de bureau utilisant les technologies Web. […] Prise en charge de technologies Web standard: HTML, CSS et Javascript sur toutes les plateformes, PHP, Python et Ruby pour les plates-formes de bureau Prise en charge intégrée de Frameworks JavaScript et AJAX populaires, notamment jQuery, YUI, MooTools, Scriptaculous et autres.

Sonne comme un outil parfait pour le travail.

Lorsque vous intégrez le contrôle de navigateur Web (IE), votre code d’application peut simplement appeler execScript (http://msdn.microsoft.com/en-us/library/ms536420(v=vs.85).aspx) sur l’object window. . Vous pouvez faire en sorte que votre script appelle l’application en utilisant l’object window.external du script et en utilisant ObjectForScripting (ou équivalent C ++) de l’application.

Peut-être que Qt sera bon pour votre cas, vous avez aussi QtScript et pouvez injecter du javascript avec evaluerJavaScript

J’ai trouvé un excellent exemple sur le Web pour appeler JS dans mon navigateur embarqué à partir de C … en utilisant essentiellement les méthodes COM-ish qui vous permettent d’obtenir un DISPID à partir d’un object script, puis en utilisant la méthode Invoke (). Cela fonctionne très bien.

Mais il s’avère que je dois aussi appeler les funcs C ++ à partir de mon code JS. Il semble que ce soit possible, et après des heures de fouillis, je pense que je l’ai presque – c’est comme ci-dessus en sens inverse – vous créez un object COM, puis le connectez à l’object script du navigateur – mais finalement deal – J’ai continué à obtenir des erreurs “bibliothèque non enregistrée”. Honnêtement, je ne connais pas assez bien COM pour le faire correctement.

Alors, pour ma part, j’ai essayé de créer ma première application C #. En 20 minutes environ, une application fonctionnait avec un navigateur où je pouvais invoquer JS à l’intérieur et faire en sorte que le navigateur appelle les méthodes C #. Geesh. Je suis un adepte de .NET après cette expérience, et je ne suis pas convaincu de la technologie Microsoft des années 90.

Dans un souci d’exhaustivité, je voudrais mentionner mon port Windows de WebKit, qui inclut les différentes fonctionnalités inter-couches de WebKit sur le Mac.

J’ai publié un exemple de code montrant comment intégrer WebKit dans une application WinAPI native, avec des exemples JavaScript-> C ++ et C ++ -> JavaScript.

L’exemple est un minuscule scénario de test pour une application beaucoup plus grande utilisant des WebViews incorporés pour les principaux composants de l’interface utilisateur. Je peux confirmer que ce que vous faites est non seulement possible, mais également un excellent moyen de créer une application.