Vous avez peut-être déjà joué avec le composant HTML de Flex disponible depuis la version 1.0 de AIR. Ce composant, comme son nom l'indique, permet d'afficher du contenu HTML très simplement à l'aide (mais c'est à vérifier) du moteur de rendu Webkit. Cela date de quelques temps quand même, mais une application que je développais pour un client avait notamment besoin d'intégrer un navigateur internet très simple.
J'ai rencontré plusieurs problèmes avec ce composant qui ne réagît pas forcément bien quand le HTML à afficher contient des erreurs (balises mal fermées, etc.). Avant de me sauter à la gorge, je vous préviens que je n'avais pas la main sur ledit HTML généré. Le développement de cette application est quasiment terminé depuis quelques mois, mais ayant du retravailler dessus récemment, j'ai de nouveau rencontré un bug étrange lors de la navigation dans un site internet affiché dans l'application : pour un même site, certains liens fonctionnaient et certains non. Après une rapide investigation, la cause venait tout simplement des attributs target="_blank". La solution pour outrepasser ce problème est très simple.
Voici une page HTML contenant 2 liens, le premier n'a aucun attribut target, aussi sera t-il automatiquement géré par le composant HTML, le deuxième a un attribut target à "_blank" et ne s'ouvrira pas lors du click.

L'application AIR en elle-même contient un composant HTML, et une barre d'outils très succinte permettant de changer l'url chargée dans le navigateur. Pour préciser, l'application que je développais utilise Flex 3, le problème (si c'en est un) n'a cependant pas été corrigé avec Flex 4.
Il est possible de naviguer à travers le DOM d'une page HTML chargée dans le composant Flex à travers la propriété domWindow (qui correspond au "window" javascript). De cette manière, nous allons nous contenter de supprimer l'attribut target :
Et le résultat fonctionne, il m'est désormais possible de naviguer sur la page de google dans mon application AIR. Il est important de préciser que l'évènement "HTML_RENDER" utilisé pour détecter tout changement de la page, sera bel et bien diffusé à chaque modification du code HTML.

Rien de bien compliqué n'est-ce pas? J'avoue ne pas savoir s'il s'agît à proprement parler d'un bug : est-ce le comportement à attendre d'un tel composant, le développeur devant gérer ce genre de cas de figure? Est-ce que le composant devrait ignorer ce genre d'attribut? Bonne question! En attendant, il existe une solution très simple pour contourner ce problème.

Hervé
Impeccable, t'as plus qu'à implémenter une popup Window avec un composant HTML dedans pour gérer automatiquement les target blank... :)
Qu'en est-il de javascript et window.open ?
2010-07-17 10:26 am