lucidiot's cybrecluster

Une tranche de console dans Internet Explorer 8

Lucidiot Informatique 2022-10-17
Les sandwichs de console ne sont pas pris en charge, mais on peut au moins manger des tranches toutes seules.


À partir d'Internet Explorer 7 sous Windows XP Service Pack 2, ainsi que Windows Server 2003, on voit apparaître sous Windows un système appelé la Windows RSS Platform. Elle se compose de trois composants qui permettent de gérer une liste de souscriptions à des flux RSS, de stocker le contenu de ces flux pour une lecture hors ligne, et de mettre à jour automatiquement les flux même quand Internet Explorer est fermé avec une tâche planifiée. Outlook 2007 et Windows Live Mail utilisent également ce système, et partagent la liste de souscriptions avec IE. Elle a un bon nombre de limitations par rapport aux lecteurs de flux RSS courants, par exemple une mauvaise prise en charge des podcasts ou des flux utilisant MediaRSS, mais elle représentait l'initiative de Microsoft à l'époque d'investir sur les flux RSS au lieu de son format propriétaire CDF, au travers notamment de son équipe RSS. Cet investissement fait partie des diverses innovations du projet Longhorn, qui visait à une intégration encore plus profonde du Web dans le système Windows, au lieu de la méthode inverse qu'on voit aujourd'hui à base d'applications Electron.

Dans Internet Explorer 8, outre des améliorations générales sur la plateforme, un nouveau concept de Web Slices apparaît. Les Web Slices sont des petites sections d'une page Web que l'utilisateur peut ajouter à sa barre de favoris. Ces morceaux de page Web sont accessibles en cliquant sur le bouton dans la barre de favoris, qui affiche une petite fenêtre avec juste ce bout de page. Les boutons s'affichent en gras si une mise à jour a été détectée automatiquement sur ce morceau de page, ce qui permet par exemple de suivre des enchères, recevoir un nouveau bulletin météo, etc. Internet Explorer va pour cela convertir le morceau de page Web en un flux RSS qui est ensuite mis à jour par la Windows RSS Platform.

J'ai dans l'idée d'explorer globalement la plateforme plus en détail, mais pour commencer, je vais essayer d'ajouter à la fameuse console sur laquelle j'ai déjà passé beaucoup trop de temps la capacité de devenir une Web Slice, pour avoir une console JS à portée de main en permanence. Ce n'est pas forcément très utile dans Internet Explorer 8 puisque des outils de développement sont disponibles, mais si on veut pouvoir saisir du VBScript, ces outils de développement ne serviront à rien. Ils ne bénéficieraient pas non plus d'améliorations potentielles que je compte faire plus tard, notamment sur l'affichage des objets ActiveX.

Notez que je vais régulièrement parler de tranches de Web au lieu de Web Slices, juste parce que la traduction littérale me fait rire, mais le nom officiel en français reste Web Slice.

Créer une Web Slice

Pour représenter des Web Slice dans une page HTML, Microsoft a défini une spécification qui se base notamment sur le microformat hAtom. Au lieu d'utiliser la spécification officielle, je me suis plutôt référé à une présentation des Web Slices dans Internet Explorer 8 Beta 1 for Developers, publiée à destination de la presse spécialisée, que je trouve plus facile à comprendre. Les explications qui y sont faites restent majoritairement valides dans la version finale d'Internet Explorer 8. Je l'ai aussi archivée proprement sur l'Internet Archive.

Les microformats sont un mouvement initié par Technorati, un moteur de recherche dédié aux blogs, et peuvent être considérés comme relevant du Web sémantique même s'ils ne sont pas liés au W3C. Ils sont maintenant une organisation autonome, indépendante de Technorati qui aujourd'hui n'existe plus. Ils sont toujours assez utilisés, notamment de par leur simplicité par rapport à d'autres formats comme JSON-LD ou RDFa, et sont notamment encouragés par le mouvement IndieWeb.

hAtom est un brouillon de spécification commencé le 22 octobre 2005, et qui est en version 0.1 depuis le 28 février 2006. Il n'y aura pas d'autre numéros de version, puisqu'il a été remplacé par h-entry, une réécriture de hAtom pour correspondre à [microformats2][microformats2], la nouvelle définition des microformats imaginée en 2010. Microformats2 apprend des six années d'existence des microformats et définit une structure plus simple pour permettre la prise en charge de nouveaux microformats lorsqu'ils sont définis.

Pour les Web Slices, Internet Explorer emploie une spécification très similaire à celle de hAtom, mais en remplaçant la classe CSS hentry, qui déclare un élément dans un flux Atom, par la classe hslice :

<article class="hslice" id="myslice">
  <h1 class="entry-title">Titre de la tranche de web</h1>
  <div class="entry-content">
    <p>Contenu de la tranche de web</p>
  </div>
</article>

Lorsque l'utilisateur survole cet élément HTML dans la page, un bouton apparaît lui indiquant qu'il peut sauvegarder ce morceau de page seul en tant que Web Slice. Le bouton RSS dans la barre d'outils d'Internet Explorer est également activé, listant toutes les slices disponibles dans la page. Si l'utilisateur sauvegarde la Web Slice, elle apparaîtra dans la barre de favoris, et la Windows RSS Platform se chargera de la mettre à jour automatiquement.

Définir une source alternative

Il est possible d'indiquer qu'on souhaite qu'Internet Explorer s'inscrive à une autre page Web en tant que Web Slice, plutôt que la page en cours. Cela peut être utile notamment lorsque la Web Slice est toute petite et au milieu d'une grande page, car Internet Explorer ira autrement télécharger l'intégralité de la page avant de découper juste la tranche en question.

<article class="hslice" id="myslice">
  <h1 class="entry-title">Titre de la tranche de web</h1>
  <p>Contenu de la tranche de web</p>
  <a rel="entry-content" href="somewhere.html">Afficher la tranche séparément</a>
</article>

Définir la fréquence de mise à jour

La Windows RSS Platform respecte les divers attributs de TTL que les différents formats RSS et Atom définissent, et il en va de même pour les Web Slice. On peut ajouter un élément avec une classe ttl qui donnera le nombre de minutes entre chaque mise à jour, selon la même définition que ttl dans RSS 2.0 :

<article class="hslice" id="myslice">
  <h1 class="entry-title">Titre de la tranche de web</h1>
  <div class="entry-content">
    <p>Contenu de la tranche de web</p>
  </div>
  <p>Mis à jour toutes les <span class="ttl">42</span> minutes</p>
</article>

Si cette valeur n'est pas spécifiée, la Windows RSS Platform utilisera sa valeur par défaut, qui est configurable globalement par l'utilisateur ; par défaut elle est définie à toutes les 24 heures. Un utilisateur peut mettre à jour à tout moment une Web Slice s'il le souhaite, et peut modifier la fréquence de mise à jour lui-même. La plateforme ajoutera aussi un délai aléatoire dans les mises à jour afin d'éviter que des milliers de systèmes Windows ne commencent une attaque par déni de service contre le site.

Gérer soi-même le flux RSS

En interne, la Windows RSS Platform va convertir la Web Slice en un flux RSS 2.0. Ça n'est pas très logique sachant que hAtom se base sur Atom et pas sur RSS, et que Atom est globalement plus structuré et plus facile pour les ordinateurs (mais moins facile pour les utilisateurs) que RSS, mais je suppose que c'est lié au fait que RSS 2.0 est le format majoritaire et que Microsoft misait dessus. Cette conversion inclut une étape d'assainissement qui retire notamment certaines balises de script et autres possibilités d'introduire du contenu néfaste dans la page. On peut si on le souhaite prendre le dessus sur cette conversion automatique et fournir son propre flux RSS :

<article class="hslice" id="myslice">
  <h1 class="entry-title">Titre de la tranche de web</h1>
  <p>Contenu de la tranche de web</p>
  <a rel="feedurl" href="slice.xml">Souscrire à la tranche</a>
</article>

Lorsque l'utilisateur s'inscrit à cette tranche, le flux RSS spécifié sera utilisé directement. Le flux doit contenir un unique <item> qui définira la tranche ; tout le contenu dans la description deviendra le HTML affiché dans la petite fenêtre de la tranche dans la barre de favoris.

Expiration

Un des cas d'utilisation imaginés par Microsoft pour les Web Slices est de pouvoir suivre quelque chose de limité dans le temps, comme une vente aux enchères sur eBay. Une telle vente finira par se terminer, par expirer ; une fois l'expiration atteinte, la tranche n'est plus mise à jour automatiquement, et le bouton de barre de favoris devient un simple lien vers la page Web originale. L'expiration utilise une date ISO 8601 incluse dans un élément d'abréviation <abbr>, en suivant la recommandation des microformats :

<article class="hslice" id="myslice">
  <h1 class="entry-title">Titre de la tranche de web</h1>
  <div class="entry-content">
    <p>Contenu de la tranche de web</p>
  </div>
  <p>Cette tranche expire <abbr class="endtime" title="2022-12-31T23:59:59Z">à la fin de l'année</a>.</p>
</article>

On notera que la recommandation de microformats indique d'éviter <abbr> pour spécifier des dates et heures, puisque l'élément HTML <time> existe et est conçu spécifiquement pour ça. Il est probable que cet élément n'existait pas à l'époque, ou juste que Internet Explorer voulait continuer à ne pas vraiment respecter les standards HTML, mais de façon plus subtile.

Intégration à la console

Nous voulons rendre la console disponible en tant que Web Slice, et la console se trouve être l'intégralité de la page. Le plus simple est donc de déclarer une Web Slice qui utilise une page HTML comme source alternative, sauf que cette page séparée se trouve être... la page actuelle. On va également définir une fréquence de rafraîchissement d'une semaine, juste parce que mes mises à jour de la console sont vraiment peu fréquentes, pour éviter d'éventuellement faire trop de requêtes inutiles à un serveur. On ajoute donc ce tag un peu n'importe où dans le <body> de notre console :

<div class="hslice" id="slice">
  <div class="entry-title">Windows Scripting Console</div>
  <a rel="entry-content" href=""></a>
  <span class="ttl">10080</span>
</div>

Notez que j'utilise href="". C'est une URL parfaitement valide, car elle est relative à la page en cours : on ne spécifie aucun schéma, hôte, port, chemin, paramètre ou ancre, donc il n'y a en fait aucune modification appliquée à l'URL en cours et c'est celle-ci qui sera directement utilisée. C'est un piège dans lequel on peut parfois tomber en écrivant notamment des générateurs de flux RSS ou Atom, où on a l'impression que les flux sont valides mais tous leurs liens mènent aux flux eux-mêmes... La fréquence de 10080 minutes est calculée pour correspondre à 7×24×60 minutes, soit une semaine.

On va aussi cacher complètement la définition de cette Web Slice pour qu'elle ne perturbe pas l'organisation de la page :

.hslice {
  display: none;
}

Voilà, c'est tout ce qu'il y a à faire pour que les Web Slices fonctionnent avec notre console... à un détail près.

Limitations de la Windows RSS Platform

Si on essaie d'ouvrir notre fichier console.html directement comme ça, le bouton de flux RSS restera désactivé et on ne pourra pas ajouter la console en tant que Web Slice. La raison pour cela est assez simple : la Windows RSS Platform est incapable de mettre à jour des flux RSS ou Atom depuis des fichiers locaux via le protocole file:///.

J'ai au départ cru que cette limitation était seulement dans Internet Explorer, car je n'avais pas encore vraiment fait le rapprochement entre la Windows RSS Platform et tout le fonctionnement des Web Slices quand j'ai commencé à expérimenter avec. J'ai donc voulu essayer de trouver les fichiers ou clés du Registre qui font fonctionner les Web Slices pour essayer de les modifier et de forcer l'utilisation d'un fichier local.

Après avoir utilisé Baby Web Server, un serveur HTTP très simple idéal pour mes expérimentations basiques, pour disposer de ma console sur http://localhost/console.html, j'ai ajouté la console en tant que Web Slice, puis j'ai trouvé un fichier Windows Scripting Console.url dans le dossier des favoris d'Internet Explorer. Avec IE, les favoris ne sont rien d'autre que des fichiers INI avec l'extension .url. Ces fichiers ont des propriétés particulières aux Web Slices et je n'y ai pas trop prêté attention, mais vu que je compte peut-être plus tard explorer ça plus en détail, j'ai gardé une copie de l'original ailleurs. J'ai également trouvé un dossier MSFeeds qui semble contenir tous les fichiers qu'utilise la Windows RSS Platform, là aussi des choses intéressantes pour de futures explorations.

J'ai modifié l'URL pour utiliser une URL file:///, mais cela a juste fait disparaître complètement la tranche de la barre d'outils ; elle n'était même plus affichée comme un favori classique ou autre.

Je me suis alors demandé comment je pourrais faire pour essayer de simplifier l'ajout de la console en Web Slice. Je voudrais autant que possible éviter d'avoir à demander à un hypothétique utilisateur de mes consoles de démarrer un serveur ; je sais déjà que pour certains endroits, ce sera inévitable, mais je veux quand même l'éviter au maximum. Après un peu d'expérimentations, je me suis souvenu que l'instance Gitea sur laquelle j'héberge le dépôt Git dans lequel je publie la console et documente mes recherches fournit aussi une instance de Codeberg Pages. C'est un service créé par Codeberg, une autre instance Gitea assez connue, et qui propose un équivalent de GitHub Pages et GitLab Pages : servir des pages HTML statiques directement depuis un dépôt Git.

Grâce à Tildepages, l'instance Codeberg Pages de Tildegit, ma console est disponible en ligne sans aucun effort. Il faudra seulement faire attention à bien avoir configuré un support HTTPS compatible avec 2022 sur son système Windows XP.

Utilisation

Voici donc un guide très rapide pour ajouter une tranche de console dans Internet Explorer 8 :

  1. Dans Internet Explorer 8, accéder à cette page.
  2. Cliquer sur le bouton vert Ajoutez des composants Web Slice de la barre de commandes en haut à droite, ou appuyer sur Alt + X.
  3. Si un menu déroulant s'affiche, cliquer sur Windows Scripting Console.
  4. Cliquer sur Ajouter au volet des Favoris.
  5. Dans la barre de favoris, un bouton Windows Scripting Console apparaît en gras. Cliquez sur ce bouton pour accéder à tout moment à la console.
La console JavaScript dans une Web Slice
La console JavaScript dans une Web Slice

Méthode alternative à base de script

Il est possible d'ajouter la console en tant que Web Slice d'une façon un peu plus étrange en utilisant la console pour ce à quoi elle est prévue, et donc en exécutant un script. La fonction AddToFavoritesBar permet d'ajouter une URL au volet des favoris en tant que marque-page, flux RSS ou Web Slice, et on peut l'appeler en JavaScript ou VBScript :

  1. Dans Internet Explorer 8, accéder à cette page.
  2. À l'aide de la console, exécuter le script JavaScript suivant :

    window.external.AddToFavoritesBar(window.location.href, document.title, 'slice')
    

    Alternativement, il est possible d'exécuter le script VBScript suivant en utilisant VBScript (Execute) :

    window.external.AddToFavoritesBar window.location.href, document.title, "slice"
    
  3. Cliquer sur Ajouter au volet des Favoris.

  4. Dans la barre de favoris, un bouton Windows Scripting Console apparaît en gras. Cliquez sur ce bouton pour accéder à tout moment à la console.

Conclusion

Dans un article relayant l'arrivée des Web Slices, des commentaires mentionnent que les Web Slices peuvent être apparentées aux Web Clips, une fonctionnalité d'Apple datant de la même époque et permettant d'utiliser des pages Web comme gadgets dans le tableau de bord d'OSX. Ça ne serait clairement pas la première fois, ni la dernière, que Microsoft copie une innovation existante sur le marché dans son écosystème.

Je ne peux pas vraiment dire si des Web Slices ont vraiment été mises à disposition par les développeurs ou connues des utilisateurs, sachant que l'intégration avec Internet Explorer n'est rapidement plus devenue une priorité avec l'apparition de Google Chrome et sa progression vers un statut de monopole, qui ont complètement achevé IE. Ça a probablement été réservé aux plus gros sites à l'époque, comme eBay, Flickr ou StumbleUpon pour reprendre quelques exemples que j'ai pu observer dans mes recherches archéologiques, avant de disparaître sans que personne ne s'en plaigne.

Malheureusement, à part la fonction susmentionnée pour ajouter automatiquement une Web Slice aux favoris, il n'existe pas vraiment de fonctionnalité particulièrement intéressante aux Web Slice qu'on pourrait explorer plus en détail maintenant, donc c'est un peu tout ce qu'on fera avec ces Web Slices. J'ai écrit cet article pour donner un exemple d'endroit relativement simple et peu connu dans lequel on peut intégrer la console. Il y a d'autres endroits encore plus simples que je listerai dans un seul article, et d'autres endroits plus complexes où j'ai encore beaucoup d'exploration à faire et qui ont plus de potentiel pour faire n'importe quoi.


Commentaires

Il n'y a pour l'instant aucun commentaire. Soyez le premier !