h = uihtml()
h = uihtml(parent)
h = uihtml(..., nomPropriete, valeurPropriete)
| Paramètre | Description |
|---|---|
| parent | objet parent. |
| nomPropriete, valeurPropriete | paires nom-valeur. |
| Paramètre | Description |
|---|---|
| h | objet graphique. |
h = uihtml() cree un composant qui affiche une page HTML dans une figure et echange des donnees avec elle.
uihtml necessite le bureau WebView. Ailleurs, il leve Nelson:uihtml:webviewDesktopRequired, car aucune page ne peut y etre affichee. Demarrez le bureau WebView pour l'utiliser.
HTMLSource accepte deux formes : du balisage HTML, ou le nom d'un fichier HTML (relatif ou absolu). La valeur est conservee telle quelle. Une URL n'est pas acceptee.
La page doit definir une fonction globale setup prenant un argument. Elle s'execute une fois le contenu charge, puis a chaque fois que HTMLSource prend une valeur differente. Reaffecter la meme valeur ne change rien.
L'objet passe a setup porte la propriete Data, les methodes addEventListener et removeEventListener, et la methode sendEventToNelson(nom, donnees). Les pages ecrites pour d'autres environnements nomment cette derniere methode autrement et doivent etre modifiees.
La notification est asymetrique. Ecrire Data depuis Nelson leve l'evenement DataChanged dans la page et n'execute pas DataChangedFcn. L'ecrire depuis la page execute DataChangedFcn, dont l'evenement porte Data et PreviousData, et n'est pas renvoyee vers la page. Ecrire une valeur egale a la valeur courante ne notifie personne.
Data transite en JSON dans les deux sens : une valeur revient donc telle que jsonencode puis jsondecode la laissent. Les entiers reviennent en double, les vecteurs ligne reviennent en colonne, datetime et categorical reviennent en texte, et les valeurs complexes ne peuvent pas etre transmises.
sendEventToHTMLSource envoie un evenement nomme a la page, que celle-ci recoit via addEventListener. Un evenement de la page parvient a Nelson via HTMLEventReceivedFcn, dont l'evenement porte HTMLEventName et HTMLEventData. Les evenements de la page sont delivres dans l'ordre ou elle les a envoyes.
La page conserve son etat lorsqu'elle est masquee, lorsque son onglet n'est pas selectionne, et lors d'un changement de parent au sein du bureau. Deplacer une figure entre sa propre fenetre et le bureau docke n'en fait pas partie : la page change de document, elle est reconstruite et setup s'execute a nouveau.
Ecrivez une page capable de se reconstruire. Data conserve sa valeur au travers d'une telle reconstruction : lisez-la dans setup et affichez a partir d'elle, plutot que d'attendre DataChanged, une notification qu'une page neuve a deja manquee. Une page qui n'affiche que sur DataChanged revient vide, et rejouer la poignee de main ne la sauve pas : ecrire la valeur deja publiee ne notifie personne.
f = uifigure();
page = ['<html><body><p id="out">waiting</p><script>', ...
'function setup(h) {', ...
' h.addEventListener("DataChanged", function () {', ...
' document.getElementById("out").textContent = JSON.stringify(h.Data);', ...
' });', ...
' h.sendEventToNelson("ready", {});', ...
'}</script></body></html>'];
h = uihtml(f, 'Position', [10 10 400 200], 'HTMLSource', page);
h.HTMLEventReceivedFcn = @(src, evt) disp(evt.HTMLEventName);
h.Data = struct('temperature', 21.5);
| Version | Description |
|---|---|
| 2.0.0 | version initiale |