Remplacement du contrôle d’édition DHTML dans Windows Vista et au-delà

 

Van Kichline
Microsoft Corporation

Août 2006

Résumé : Le contrôle d’édition DHTML ne sera pas inclus dans Windows Vista. Les pages web et les applications Windows qui utilisent le contrôle doivent être modifiées pour continuer à fournir un éditeur HTML WYSIWYG. (25 pages imprimées)

S’applique à :
   Internet Explorer 7 sur Windows Vista
   Pages web destinées aux Explorer Internet qui hébergent le contrôle d’édition DHTML
   Applications Windows qui utilisent le contrôle ActiveX d’édition DHTML ou le document ActiveX TriEdit

Contenu

Introduction
Effet sur les applications Windows
Effet sur les applications web
Résumé

Introduction

Le contrôle d’édition DHTML est un contrôle ActiveX conçu pour l’édition HTML WYSIWYG dans les pages web et les applications Windows. Il a été initialement publié dans activeX Control Gallery début 1998 par l’équipe de développement Microsoft Visual InterDev. Il est rapidement apparu que le couplage étroit entre internet Explorer et le contrôle rendait souhaitable l’expédition du contrôle dans le cadre de chaque mise à jour de l’internet Explorer, et le contrôle a été expédié dans le cadre de l’Internet Explorer depuis la publication de l’Internet Explorer 5 au début de 1999.

Plusieurs facteurs ont été combinés pour rendre l’appui continu du contrôle moins souhaitable au fil du temps. Internet Explorer a continué à évoluer, incorporant ses propres fonctionnalités d’édition WYSIWYG dans Internet Explorer 5.5 et Internet Explorer 6. Dans le même temps, la sécurité est devenue une priorité majeure pour les Explorer Internet. Pour renforcer la sécurité, le navigateur limite l’accès au contenu potentiellement dangereux, mais l’éditeur s’efforce de s’assurer que son contenu changeant est conservé en toute sécurité. Plusieurs bulletins de sécurité ont entraîné un environnement de navigateur plus verrouillé, ce qui a réduit l’utilité du contrôle d’édition DHTML et augmenté considérablement son coût de possession.

La décision a donc été prise de supprimer le contrôle de Windows Vista. Le contrôle était présent dans la version bêta 1 de Windows Vista, mais est absent dans les versions bêta suivantes et dans la version finale de Windows Vista.

Ce document décrit l’effet de cette décision sur les applications existantes qui utilisent le contrôle, comment déterminer quelles applications et pages Web utilisent le contrôle, et comment atténuer l’impact de cette modification sur ces applications et sur les pages Web.

Leçon d’anatomie

Le contrôle d’édition DHTML prend en charge l'« édition HTML WYSIWYG », ce qui signifie que l’utilisateur peut taper du texte dans le contrôle tout en voyant le code HTML mis en forme tel qu’il serait sur une page Web. Diverses commandes permettent à l’utilisateur d’ajuster les polices, les couleurs et la mise en forme et de voir les effets immédiatement. Cela est similaire à l’utilisation d’un contrôle de zone de texte enrichi dans un formulaire client, mais les données enregistrées par le contrôle sont HTML au lieu de RTF.

Le contrôle d’édition DHTML est plus complexe que de nombreux autres contrôles. Il se compose de deux composants : Dhtmled.ocx et TriEdit.dll. Les composants se trouvent dans les fichiers suivants, qui ont été supprimés pour Windows Vista :

  • [lecteur:]\Program Files\Common Files\Microsoft Shared\Triedit\dhtmled.ocx
  • [lecteur:]\Program Files\Common Files\Microsoft Shared\Triedit\TRIEDIT.DLL

Les deux composants implémentent à leur tour cinq objets distincts :

Dhtmled.ocx

  • Contrôle d’édition DHTML sécurisé pour le script (DHTMLSafe)
  • Contrôle d’édition DHTML pour les applications (DHTMLEdit)
  • Objet d’assistance DEGetBlockFmtNamesParam
  • Objet d’assistance DEInsertTableParam

TriEdit.dll

  • TriEdit Objet Document

Seuls le contrôle d’édition DHTML safe-for-scripting, l’objet DEGetBlockFmtNamesParam et l’objet DEInsertTableParam sont marqués comme sécurisés pour le script et peuvent être créés sur une page Web. DEGetBlockFmtNamesParam et DEInsertTableParam sont des objets simples qui sont utilisés exclusivement pour transmettre des données à et à partir de certaines commandes implémentées par le contrôle d’édition DHTML.

Le contrôle d’édition DHTML pour applications est une version plus puissante du contrôle qui agrège le contrôle safe-for-scripting et est destiné à être utilisé dans les applications d’hébergement ActiveX, telles que celles qui ont été créées à l’aide de Visual Basic ou De Delphi. Ce contrôle a également été exclu de Windows Vista. Toutefois, Microsoft accorde des licences à une version identique au travail du contrôle qui peut être installée par des tiers pour permettre aux applications qui s’appuient sur ce contrôle de continuer à travailler sur Microsoft Vista. Pour plus d’informations, consultez la section Stratégies d’atténuation pour les applications Windows plus loin dans ce document.

L’objet Document TriEdit est un document ActiveX instancié avec CoCreate par les deux versions du contrôle d’édition DHTML et qui peut être instancié séparément par les applications d’hébergement de documents ActiveX. Les documents ActiveX peuvent être beaucoup plus complexes à héberger que les contrôles, mais ils permettent un contrôle plus direct sur l’apparence et l’intégration de la surface d’édition. Comme avec le contrôle d’édition DHTML pour applications, l’objet Document TriEdit est pris en charge dans Windows Vista avec un objet professionnel tiers.

En plus de fournir une surface d’édition HTML WYSIWYG et un ensemble de propriétés, méthodes et événements orientés vers des tâches d’édition classiques, l’objet Contrôle d’édition DHTML et Document TriEdit prennent en charge ces fonctionnalités supplémentaires :

  • Annulation et restauration à plusieurs niveaux.
  • Modification de table rudimentaire.
  • Fonctionnalités de sélection telles que le glisser-déplacer, le redimensionnement et l’activation de l’interface utilisateur.
  • Positionnement absolu et classement en Z.
  • Conservation du code source.
  • Rendu des glyphes de balise HTML.
  • Prise en charge du contrôle au moment de la conception (DTC). (Il s’agissait d’une fonctionnalité disponible dans Microsoft Visual InterDev.)
  • Raccourcis clavier.

Certaines de ces fonctionnalités ont été incorporées dans internet Explorer par le biais d’une fonctionnalité appelée modification MSHTML, telle qu’implémentée à l’aide de la propriété designMode DHTML. Toutefois, toutes les fonctionnalités de contrôle d’édition DHTML ne sont pas prises en charge dans l’édition MSHTML. Par exemple, la conservation du code source dans le contrôle d’édition DHTML lui permet de conserver la mise en forme du code source HTML ; la préservation du code source n’est pas disponible dans la modification MSHTML. Le positionnement absolu et l’ordre Z sont désormais gérés par internet Explorer. La modification de table n’est pas prise en charge, pas plus que les DTC.

Les pages web qui utilisent le contrôle d’édition DHTML spécifiquement en raison de sa capacité de conservation du code source seront gravement affectées par cette modification. Il n’existe aucune alternative pratique disponible pour cette fonctionnalité, et l’implémentation d’un remplacement constitue un problème technique difficile.

Effet sur les applications Windows

Les applications Windows qui incorporent le contrôle d’édition DHTML pour les applications ne fonctionneront plus comme prévu sur Windows Vista. Les applications Visual Basic, par exemple, peuvent afficher le message suivant lorsqu’elles sont ouvertes ou lorsque le formulaire contenant le contrôle est instancié :

Composant 'dhtmled.ocx' ou l’une de ses dépendances non inscrit correctement : un fichier est manquant ou non valide.

Les applications Delphi peuvent lever des exceptions non gérées.

Déterminer quelles applications Windows sont affectées

Vous pouvez déterminer si les applications Visual Basic contiennent le contrôle d’édition DHTML avec la commande windows findstr , à l’aide de la syntaxe suivante :

findstr /m DHTMLEDLibCtl.DHTMLEdit YourApplication.exe

Les applications Delphi contiennent les chaînes « DHTMLEDLib_TLB » et « IDHTMLEdit ». Par conséquent, vous pouvez utiliser la commande suivante pour rechercher les applications Visual Basic et Delphi qui utilisent le contrôle :

findstr /im dhtmledlib YourApplication.exe

Les applications C et C++ peuvent utiliser TriEdit directement au lieu d’utiliser le contrôle d’édition DHTML. Au lieu de charger une bibliothèque de types, les langages de bas niveau utilisent fréquemment la méthode CoCreateInstance pour instancier un objet OLE. Dans ce cas, le GUID utilisé pour créer l’objet est compilé dans l’application. Les GUID du contrôle et du document TriEdit sont les suivants :

  • TriEdit Document : {438DA5E0-F171-11D0-984E-0000F80270F8}
  • DHTMLEdit : {2D360200-FFF5-11d1-8D03-00A0C959BC0A}
  • ITriEditDocument : {438DA5DF-F171-11D0-984E-0000F80270F8}
  • IDHTMLEdit : {CE04B591-2B1F-11D2-8D1E-00A0C959BC0A}

Si vous devez rechercher du code compilé, vous pouvez examiner certains modèles qui représentent les GUID. Par exemple, le GUID suivant :

{ABCDEFGH-IJKL-MNOP-QRST-UVWXYZ012345}

devient la séquence hexadécimale suivante en binaire :

GH EF CD AB KL IJ OP MN QR ST UV WX YZ 01 23 45

L’exemple suivant montre un programme C# simple pour rechercher des fichiers binaires exécutables pour l’un de ces GUID.

// Compile and execute:  "FindGUIDs YourApplication.exe"
using System;
using System.Text;
using System.IO;

namespace FindGUIDs {
class Program {
  static void Main(string[] args) {
    FileStream    fs = File.OpenRead(args[0]);
    StringBuilder sb = new StringBuilder();
    do {
      Int32 b = fs.ReadByte();
      if (-1 == b) {
        break;
      }
      sb.AppendFormat("{0:X2}", b);
    } while (true);
    fs.Close();
    String s = sb.ToString();
    if (s.Contains("E0A58D4371F1D011984E0000F80270F8"))
      Console.Out.WriteLine("GUID for TriEditDocument Class detected.");
    if (s.Contains("DFA58D4371F1D011984E0000F80270F8")) {
      Console.Out.WriteLine(
        "GUID for ITriEditDocument Interface detected.");
      }
      if (s.Contains("0002362DF5FFd1118D0300A0C959BC0A")) {
        Console.Out.WriteLine("GUID for DHTMLEdit Class detected.");
      }
      if (s.Contains("91B504CE1F2Bd2118D1E00A0C959BC0A")) {
        Console.Out.WriteLine("GUID for IDHTMLEdit Interface detected.");
      }
    }
  }
}

Étant donné que C, C++ et d’autres langages de bas niveau sont libres d’instancier des objets COM de plusieurs façons, la méthode illustrée dans l’exemple n’est pas garantie de localiser toutes les instances de l’objet de contrôle ou de document. Si ce test est négatif, utilisez la commande Windows findstr pour rechercher des représentations textuelles de fragments GUID, comme 438DA5E0 ou 2D360200. Si le code source est disponible, inspectez-le soigneusement. Recherchez des fragments de GUID ou du texte tel que « dhtmledit » ou « triedit ». Il est important de rechercher des fragments de GUID, car il existe plusieurs façons de représenter les GUID en tant que texte. Les huit premiers chiffres sont consécutifs et sont généralement uniques, ce qui constitue un bon modèle de recherche.

Stratégies d’atténuation pour les applications Windows

Bien que le contrôle d’édition DHTML et TriEdit soient supprimés de Windows Vista, Microsoft met les deux composants binaires à la disposition des éditeurs de logiciels indépendants en tant que composant empaqueté dans un programme d’installation de Microsoft Windows signé (fichier .msi). La version safe-for-scripting du contrôle d’édition DHTML ne sera pas incluse dans ce package. Les informations de licence sont incluses dans le Contrat de licence utilisateur final affiché par ce programme d’installation. Examinez attentivement ce point avant d’installer ou de redistribuer le package.

Pour obtenir le programme d’installation de Windows, visitez le site web du Centre de téléchargement Microsoft. Ce programme d’installation est signé et contient des fichiers binaires signés pour le contrôle et pour TriEdit, tous deux modifiés pour une utilisation sur Windows Vista. Ce package s’installe uniquement sur Windows Vista. Il ne s’exécutera pas sur les versions antérieures de Windows, telles que Windows XP. Si vous essayez d’exécuter le programme d’installation sur une version antérieure de Windows, une boîte de dialogue affiche l’erreur :

Ce programme d’installation est conçu pour Windows Vista et l’installation s’arrête.

Pour installer le fichier, vous pouvez double-cliquer dessus, cliquer dessus avec le bouton droit et sélectionner Installer, ou exécuter la commande suivante :

msiexec /i dhtmled.msi

Cette opération installe et inscrit Dhtmled.ocx et Triedit.dll dans le répertoire suivant :

%windir%\Program Files\Common Files\Microsoft Shared\dhtmled\

L’installation du contrôle ajoute une entrée « Composant d’édition DHTML » à l’application Ajout/Suppression de programmes dans le Panneau de configuration Windows.

Une fois les versions Windows Vista des composants binaires installées, l’expérience utilisateur avec le contrôle d’édition DHTML pour Application et TriEdit ne peut pas être distincte de l’expérience utilisateur sur les versions antérieures de Windows. Toutes les fonctionnalités sont conservées, et tous les GUID, progID, noms de bibliothèque de types, etc. sont identiques. (Il existe une différence dans l’expérience utilisateur pour le contrôle d’édition DHTML sécurisé pour le script, qui est omis sur Windows Vista. Pour plus d’informations, consultez la section Effet sur les applications web plus loin dans ce document.)

Applications héritées

Si vous utilisez le programme d’installation Dhtmled.msi, vos applications héritées fonctionneront sous Windows Vista comme ils l’ont toujours fait. Si vous n’avez pas installé les nouveaux composants binaires, les applications héritées qui incluent le contrôle d’édition DHTML pour les applications présentent différents modes d’échec lorsqu’elles sont exécutées sous Windows Vista. Si vous êtes un fournisseur d’applications, vous pouvez fournir une mise à jour ou envoyer des instructions pour obtenir le programme d’installation de Windows Vista directement aux utilisateurs finaux, et les utilisateurs peuvent ensuite installer les versions de Windows Vista eux-mêmes et continuer à utiliser leurs applications. Il est probable que les utilisateurs qui rencontrent des erreurs après avoir installé Windows Vista recherchent sur le web le texte des messages d’erreur et le nom de votre produit avant de contacter votre service clientèle. Par conséquent, vous devez publier des informations sur la localisation du programme d’installation. Le téléchargement et l’installation des versions Windows Vista des composants binaires seront simples pour la plupart des utilisateurs.

Nouvelles applications

Pour les nouvelles applications, vous pouvez expédier le programme d’installation dans le cadre de votre produit (avec les licences appropriées) et le lier à partir de votre propre programme d’installation. Le programme d’installation peut être exécuté en mode silencieux et sans ajouter d’élément à la liste des programmes installés dans Windows. (Pour plus d’informations, consultez la documentation pour MsiExec.exe.)

Toutefois, nous recommandons que le programme d’installation autorise l’ajout du contrôle d’édition DHTML à la liste des programmes installés. En outre, lorsque votre application est désinstallée, ne désinstallez pas le contrôle ; au lieu de cela, autorisez les clients à le désinstaller séparément s’ils le souhaitent.

Notez que cette méthode d’installation ne fournit pas d’installation conforme au logo. Il a été déterminé que cette atténuation était acceptable pour les raisons suivantes :

  • Un nombre limité d’applications inclut les composants.
  • Le risque qu’un seul ordinateur héberge plusieurs de ces applications est faible.
  • Si une application est endommagée par une autre application désinstallant le contrôle d’édition DHTML, l’application endommagée peut facilement être réparée à l’aide de l’option Réparer disponible dans l’application Ajout/Suppression de programmes .

Si votre application nécessite la conformité du logo, vous devez demander à l’utilisateur d’installer le contrôle d’édition DHTML pour Windows Vista séparément.

Effet sur les applications web

Le contrôle d’édition DHTML est disponible pour les pages HTML, ASP et ASP.NET, ainsi que pour d’autres documents accessibles via HTTP, depuis la publication d’Internet Explorer 5. Sur Windows Vista, les pages web qui utilisent le contrôle d’édition DHTML sécurisé pour le script ne pourront pas charger le contrôle. Au lieu de cela, un espace réservé d’image s’affiche :

Aa663363.htmleditinfuture01(en-us,MSDN.10).gif

En outre, tout script qui fait référence au contrôle lève des exceptions. Étant donné que les exceptions de script mettent fin à l’évaluation du script, il est probable que les fonctionnalités non liées contrôlées par le script seront également rendues inopérantes. Par conséquent, vous devez modifier ou recibler les pages qui contiennent le contrôle d’édition DHTML sécurisé pour script et qui seront disponibles pour les clients Windows Vista.

Note À l’origine, le contrôle d’édition DHTML pour applications (celui qui n’est pas sécurisé pour les scripts) pouvait également être utilisé sur une page Web (avec un message d’avertissement), mais avec la publication d’Internet Explorer 6, le renforcement de la sécurité dans le contrôle a rendu la version de l’application pratiquement inutilisable sur une page Web. Il est peu probable qu’une page Web fonctionnelle instancie le contrôle d’édition DHTML pour les applications.

Détermination des pages web affectées

Les pages web qui contiennent le contrôle d’édition DHTML sécurisé pour le script l’implémentent en tant que balise d’objet<> comme suit :

<!-- The DHTML Editing Control; original GUID -->
<OBJECT id="editor" height=400 width=640
  classid="clsid:2D360201-FFF5-11d1-8D03-00A0C959BC0A">
</OBJECT>

De nombreuses pages Web utilisant le contrôle ont été créées avec Microsoft Visual InterDev, ou elles ont utilisé un exemple de code généré par Visual InterDev. Dans ce cas, le balisage ressemblera à ce qui suit :

<OBJECT classid="clsid:2D360201-FFF5-11D1-8D03-00A0C959BC0A"
    class="anyClass" ID="editor" VIEWASTEXT>
  <PARAM name="ActivateApplets" value="0">
  <PARAM name="ActivateActiveXControls" value="-1">
  <PARAM name="ActivateDTCs" value="-1">
  <PARAM name="ShowDetails" value="0">
  <PARAM name="ShowBorders" value="0">
  <PARAM name="Appearance" value="0">
  <PARAM name="Scrollbars" value="-1">
  <PARAM name="ScrollbarAppearance" value="1">
  <PARAM name="SourceCodePreservation" value="-1">
  <PARAM name="AbsoluteDropMode" value="0">
  <PARAM name="SnapToGrid" value="0">
  <PARAM name="SnapToGridX" value="50">
  <PARAM name="SnapToGridY" value="50">
  <PARAM name="UseDivOnCarriageReturn" value="1">
</OBJECT>

Les balises supplémentaires représentent les valeurs d’initialisation pour les paramètres pris en charge par le contrôle. Les applications de conception de pages web qui conservent le conteneur de propriétés d’un contrôle incluent ces balises PARAM avec le contenu HTML lors de l’enregistrement de la page.

La case activée rapide la plus efficace consiste à rechercher dans votre magasin de pages Web le GUID commun (2D360201-FFF5-11D1-8D03-00A0C959BC0A) ou simplement le fragment 2D360201. Les pages qui contiennent ce texte incluent presque certainement le contrôle d’édition DHTML sécurisé pour le script.

Stratégies d’atténuation pour les applications web

En réponse à la suppression du contrôle d’édition DHTML et de TriEdit de Windows Vista, Microsoft a rendu le contrôle d’édition DHTML pour les applications et TriEdit disponible en tant que composant système empaqueté dans un programme d’installation Windows signé (fichier .msi). Toutefois, la version safe-for-scripting du contrôle d’édition DHTML ne sera pas incluse dans ce package.

Une grande partie des fonctionnalités que le contrôle d’édition DHTML implémente a été rendue disponible directement sur Internet Explorer par le biais de la modification MSHTML, c’est-à-dire à l’aide de la propriété designMode. Par conséquent, dans de nombreux cas, les fonctionnalités du contrôle peuvent être remplacées par la modification MSHTML, par exemple, par un <élément iframe> placé en mode création, comme expliqué plus loin dans ce document.

Utilisation d’autres contrôles

Une stratégie d’atténuation consiste à utiliser d’autres contrôles ActiveX ou ASP.NET des contrôles personnalisés en remplacement. La recherche sur le web de « CONTRÔLE d’éditeur HTML WYSIWYG » suggère plusieurs candidats. Microsoft n’a pas mené d’enquête sur ces produits et ne peut pas faire de recommandations. Par conséquent, vous devez déterminer le mieux adapté à vos besoins. Tout remplacement est susceptible d’avoir un modèle objet différent du contrôle d’édition DHTML et nécessite la modification du script de prise en charge sur la page à l’aide du contrôle. La difficulté de cette modification dépend du degré de sophistication de l’implémentation.

Implémentation de la redirection sélective

Seuls les navigateurs Internet Explorer s’exécutant sur Windows peuvent instancier le contrôle d’édition DHTML sécurisé. Par conséquent, si vous disposez d’une application « reach » destinée à différents navigateurs, vous avez peut-être déjà intégré la détection et la redirection du navigateur dans l’application. Par exemple, l’application peut rediriger internet Explorer requêtes vers une page qui contient le contrôle, et rediriger d’autres requêtes de navigateur vers une page qui utilise un autre moyen d’entrée.

Vous pouvez déterminer si une demande provient de Windows Vista en examinant la chaîne d’agent utilisateur envoyée avec la demande. La chaîne de l’agent utilisateur pour Internet Explorer 7 sur Windows Vista ressemble à ce qui suit :

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; MSDigitalLocker Vista 
1.3; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; WinFX RunTime 
3.0.50727; InfoPath.1)

L’exemple suivant en C# montre le code permettant de détecter et de rediriger une requête à partir de Windows Vista et d’Internet Explorer 7.

protected void Page_Load(object sender, EventArgs e) {
    string ua = Request.UserAgent.ToLower();
    bool isVista = ua.Contains("windows nt 6.");
    bool isIE7 = ua.Contains("msie 7.");
    Response.Redirect((isVista && isIE7) ?
        "Surrogate.htm" : "DHTMLEd.htm");
}

Dans Visual Basic Scripting Edition (VBScript) pour ASP, le code suivant effectue la même tâche.

<% @Language = "VBScript" %>
<%
Dim ua, isVista, isIE7
ua = LCase(Request.ServerVariables("HTTP_USER_AGENT"))
isVista = (0 < InStr(ua, "windows nt 6."))
isIE7   =  (0 < InStr(ua, "msie 7."))
If isVista AND isIE7 Then
    Response.Redirect "Surrogate.htm"
Else
    Response.Redirect "DHTMLEd.htm"
End If
%>

Réimplémentation de la fonctionnalité d’édition

Si les fonctionnalités du contrôle d’édition DHTML sont absolument nécessaires et que la substitution est peu pratique, la meilleure stratégie peut consister à réimplémenter les fonctionnalités du contrôle à l’aide de la modification et du script MSHTML. L’édition MSHTML est disponible dans Internet Explorer 5.5 et versions ultérieures ; le contrôle d’édition DHTML peut être utilisé avec Internet Explorer 5.0 et versions ultérieures. Par conséquent, si vous réimplémentez la fonctionnalité, vous devrez peut-être toujours fournir une page redirigée contenant le contrôle d’édition DHTML pour les utilisateurs disposant d’Internet Explorer 5.0.

Cette section montre une façon de réimplémenter les fonctionnalités du contrôle d’édition DHTML sécurisé à l’aide d’un <élément iframe> . Vous pouvez implémenter des fonctionnalités d’édition de base à l’aide d’une page telle que la suivante :

<html>
<head>
<title>DHTML Editing Control Surrogate Example</title>
<script type="text/javascript">
function FillEditor() {
    var doc = editor.document;
    doc.designMode = "on";
    doc.write("<body><p><i>Visualize</i> <u>peace</u></p></body>");
    doc.close();
}
</script>
</head>
<body onload="FillEditor()">
  <iframe id="editor" scrolling="yes" height="100" width="300">
  </iframe>
  <p>
  <input type=button 
     value="Submit" 
     onclick=
       "alert(editor.document.getElementsByTagName('HTML')[0].outerHTML)">
</body>
</html>

Cette page affiche une zone modifiable qui contient du code HTML mis en forme. Vous pouvez taper dans cette zone et utiliser des touches d’accès rapide telles que Ctrl+I pour activer l’italique et Ctrl+vous pour activer le soulignement. Lorsque vous appuyez sur le bouton Envoyer, une boîte de message affiche le contenu HTML de l’élément <iframe> . Pour implémenter l’équivalent des propriétés, méthodes et événements du contrôle d’édition DHTML, vous devez utiliser un script.

Pour des raisons de sécurité, seul le contenu du même domaine est accessible au-delà de la <limite iframe> . Pour vous assurer que le contenu du frame est accessible, initialisez-le à partir d’une URL du même domaine à l’aide de l’attribut src , comme dans l’exemple suivant :

<iframe id="editor" 
  scrolling="yes" 
  height="100" 
  width="300" 
  src="templates/blank.htm">
</iframe>

Pour plus d’informations sur la modification à l’aide de la propriété designMode dans Internet Explorer, consultez la page Présentation de la modification MSHTML sur le site web Microsoft.

Méthodes

Le tableau suivant répertorie les méthodes du contrôle d’édition DHTML safe-for-scripting et indique si elles peuvent être réimplémentées à l’aide d’un script dans Internet Explorer.

Méthodes du contrôle d’édition DHTML sécurisé pour l’écriture de scripts

Commande Supportable ?
ExecCommand Partiellement
QueryStatus Partiellement
SetContextMenu Oui
NewDocument Oui
LoadURL Oui
FilterSourceCode Non
Actualiser Non requis

Les méthodes ExecCommand et QueryStatus peuvent être remplacées en appelant et en interrogeant editor.document.execCommand des commandes sur l’objet editor.document . Un sous-ensemble des commandes implémentées par le contrôle d’édition DHTML est disponible via des scripts, comme décrit dans la section Valeurs CommandID plus loin dans ce document.

Pour obtenir les fonctionnalités de la méthode QueryStatus dans la modification MSHTML, vous devez inclure du code semblable à ce qui suit :

var NOTSUPPORTED =  0;
var DISABLED     =  1;
var ENABLED      =  3;
var LATCHED      =  7;
var NINCHED      = 11;
var result = NOTSUPPORTED;
if(editor.document.queryCommandSupported(cmdName)) {
    result = editor.document.queryCommandEnabled(cmdName) ?
        ENABLED : DISABLED;
    if(ENABLED == result) {
        if(editor.document.queryCommandIndeterm(cmdName)){
            result = NINCHED;
        }
        else if(editor.document.queryCommandState(cmdName)) {
            result = LATCHED;
        }
    }
}

Notes supplémentaires sur les méthodes

La méthode SetContextMenu prend un tableau de chaînes et un tableau d’états (MENU_UNCHECKED=0, , MENU_CHECKED=1et MENU_GRAY=2) et les stocke jusqu’à ce qu’un événement oncontextmenu soit déclenché par l’éditeur. Pour remplacer cette méthode, utilisez l’une des nombreuses implémentations de menu contextuel HTML disponibles (la plupart utilisent la méthode createPopup ).

Si vous prendz en charge la propriété UseDivOnCarriageReturn , le contenu avec lequel vous rechargez est conditionnel à la valeur de la propriété. Si vous prendz en charge la propriété Dirty , désactivez-la lorsque vous créez un document.

La méthode NewDocument remplace le contenu de l’éditeur par un document vide. Pour remplacer cette commande, vous pouvez utiliser un script comme suit :

var htmlP = "<html><head><title>New Document</title></head>" + 
    "<body><p>&nbsp;</p></body></html>";
var htmlD = "<html><head><title>New Document</title></head>" + 
    "<body><div>&nbsp;</div></body></html>";
var useDivOnCR = false;
function NewDocument() {
    editor.document.write(useDivOnCR ? htmlD : htmlP);
    editor.document.close();
}

Pour remplacer la méthode LoadURL , utilisez du code tel que editor.src=url. Si vous prendz en charge la propriété Dirty , désactivez-la lorsque vous chargez un nouveau document.

La méthode FilterSourceCode est destinée à la préservation du code source et ne peut pas être réimplémentée dans un script. Si vous devez définir cette méthode à des fins de compatibilité, retournez simplement son paramètre, comme indiqué dans l’exemple suivant.

function FilterSourceCode(str) { return str; }

La méthode Refresh invalide le rectangle de la fenêtre de contrôle et peut être remplacée par une méthode qui ne fait rien, comme indiqué ci-dessous dans une réimplémentation.

function Refresh() {}

Propriétés

Le tableau suivant répertorie les propriétés du contrôle d’édition DHTML safe-for-scripting et indique si elles peuvent être réimplémentées à l’aide d’un script dans Internet Explorer.

Propriétés du contrôle d’édition DHTML sécurisé pour l’écriture de scripts

Propriété Type de données Sens Supportable ?
CurrentDocumentPath String Sortie Oui
DOM Object Sortie Oui
DocumentHTML String Entrée/Sortie Oui
IsDirty Boolean Sortie Partiellement
SourceCodePreservation Boolean Entrée/Sortie Non
ActivateApplets Boolean Entrée/Sortie Non
ActivateDTCs Boolean Entrée/Sortie Non
ActivateActiveXControls Boolean Entrée/Sortie Non
ShowDetails Boolean Entrée/Sortie Non
ShowBorders Boolean Entrée/Sortie Non
AbsoluteDropMode Boolean Entrée/Sortie Non
Défilement Boolean Entrée/Sortie Oui
Apparence Spécial Entrée/Sortie Oui
Barre de défilementAppearance Spécial Entrée/Sortie Oui
SnapToGridX Long Entrée/Sortie Non
SnapToGridY Long Entrée/Sortie Non
SnapToGrid Boolean Entrée/Sortie Non
Baseurl String Entrée/Sortie Oui
DocumentTitle String Sortie Oui
UseDivOnCarriageReturn Boolean Entrée/Sortie Oui
Occupé Boolean Sortie Oui

Notes supplémentaires sur les propriétés

Vous pouvez implémenter la propriété CurrentDocumentPath en retournant editor.location.href.

La propriété DOM équivaut à editor.document.

La propriété DocumentHTML peut être implémentée en tant que editor.getElementsByTagName('HTML')[0].outerHTML.

La propriété IsDirty ne peut pas être remplacée exactement. Vous pouvez le rapprocher en définissant une variable globale associée à l’élément iframe> de l’éditeur< pour toutes les méthodes, propriétés et commandes qui modifient le document. Divers événements peuvent également faire en sorte que le document soit sale, comme oncut, onpaste, ondrop et onmove. Pour plus d’informations, consultez les notes relatives à l’événement DisplayChanged sous Événements plus loin dans ce document. Les méthodes telles que NewDocument et LoadURL doivent effacer l’indicateur de sale global.

Les propriétés SourceCodePreservation, ActivateApplets, ActivateDTCs, ActivateActiveXControls, ShowDetails, ShowBorders, AbsoluteDropMode, SnapToGrid, SnapToGridX et SnapToGridY ne peuvent pas être implémentées dans un script.

La propriété Apparence définit l’apparence de la bordure du contrôle d’édition DHTML lui-même. Dans votre réexédition, vous pouvez définir editor.frameBorder.

La propriété Scrollbars peut être implémentée en définissant editor.body.scroll sur « Oui » ou « Non ». Il peut être récupéré à l’aide de la comparaison (editor.body.scroll=="no")

Pour ré-implémenter la propriété ScrollbarAppearance , utilisez des attributs CSS. (Pour plus d’informations, recherchez « Barre de défilement plate CSS ». )

La propriété DocumentTitle peut être remplacée par editor.document.title.

La propriété UseDivOnCarriageReturn a été conçue pour aider à spécifier (indirectement) le comportement de la clé ENTRÉE. Par défaut, appuyer sur ENTRÉE dans une zone HTML modifiable insère un <élément p> . Dans le contrôle d’édition DHTML, lorsque la touche ENTRÉE est enfoncée, l’élément de bloc dans lequel l’utilisateur tape est divisé en deux blocs similaires. Si le curseur se trouve dans un <élément p> , un autre <élément p> qui a des attributs similaires est créé. Si le curseur se trouve dans un <élément div> , un autre <élément div> est créé.

La propriété UseDivOnCarriageReturn spécifie l’élément de bloc par défaut utilisé lors de la création d’un document vide en appelant la méthode NewDocument . Si la propriété a la valeur true, le bloc par défaut est un <élément div> , avec le texte initial semblable à ce qui suit :

<HTML>
<HEAD><TITLE></TITLE></HEAD>
<BODY><DIV>&nbsp;</DIV></BODY>
</HTML>

Dans le cas contraire, le texte initial sera semblable à ce qui suit :

<HTML>
<HEAD><TITLE></TITLE></HEAD>
<BODY><P>&nbsp;</P></BODY>
</HTML> 

La propriété Busy indique que le contrôle est en cours de chargement. Il peut être remplacé par editor.document.readyState != "complete".

Réexédition de la propriété BaseURL

La propriété BaseURL définit la partie racine de l’URL utilisée pour résoudre les URL relatives. Il existe des différences significatives entre la façon dont le contrôle d’édition DHTML et l’édition MSHTML fonctionnent à cet égard. Lorsque le contrôle d’édition DHTML a été introduit à l’origine dans Internet Explorer 4, le modèle objet de document (DOM) n’incluait pas l’accès à l’élément <head>, de sorte qu’un <élément de base> n’a pas pu être ajouté au document par programmation. Au lieu de cela, le contrôle combine en interne des URL relatives avec une URL de base stockée dans la propriété BaseURL . Dans la version actuelle d’Internet Explorer, un <élément de base> peut facilement être ajouté au document de l’éditeur, mais l’utilisation de cette technique entraîne un comportement différent de celui de la propriété BaseURL du contrôle, car l’élément fait partie du contenu de la editor.document propriété. Par conséquent, pour simuler le comportement du contrôle pour la propriété BaseURL , vous devez supprimer <l’élément de base> du document une fois que le contenu HTML a été obtenu à partir du contenu du document. La réexédition de la propriété BaseURL n’est pas simple et vous devez tester votre application avec soin pour vous assurer que vous voyez bien le comportement que vous souhaitez.

Une autre différence est que le contrôle d’édition DHTML exécute la commande IDM_NOFIXUPURLSONPASTE , qui n’est pas disponible à partir du script. Cette commande empêche les URL relatives d’être modifiées en URL absolues lorsque du contenu est collé dans une zone modifiable. Vous pouvez définir l’élément <de base> pour remplacer ce correctif ou utiliser une expression régulière pour corriger cette différence.

Pour obtenir la valeur de balise <d’élément de base> d’un document, utilisez un script tel que le suivant :

var baseHref = "";
var h = editor.document.getElementsByTagName("head");
if((undefined != h) && (0 < h.length)) {
    var b = h[0].getElementsByTagName("base");
    if((undefined != b) && (0 < b.length)) {
        baseHref = b[0].href;
    }
}

Pour définir l’élément <de base> d’un document, utilisez un script tel que le suivant :

var h = editor.document.getElementsByTagName("head");
if((undefined != h) && (0 < h.length)) {
    var b = h[0].getElementsByTagName("base");
    if((undefined == b) || (0 == b.length)) {
        var nb = editor.document.createElement("BASE");
        nb.href = newBaseHrefValue;
        h[0].insertAdjacentElement("afterBegin", nb);
    }
    else
        b[0].href = newBaseHrefValue;
}

Pour supprimer la <balise de base> du texte retourné à partir du contenu de la editor.document propriété, utilisez un script tel que le suivant :

var html = DocumentHTML();
var rex = new RegExp("<BASE[\\s]+[^>]*>", "i");
html = html.replace(rex, "");

Événements

Le tableau suivant répertorie les événements du contrôle d’édition DHTML sécurisé pour script et indique s’ils peuvent être ré-implémentés à l’aide d’un script dans Internet Explorer.

Événements du contrôle d’édition DHTML sécurisé pour le script

Événement Supportable ?
DocumentComplete Oui
DisplayChanged Partiellement
ShowContextMenu(xPos,yPos) Oui, avec modification
ContextMenuAction(itemIndex) Oui, avec modification
Onmousedown Oui
Onmousemove Oui
Onmouseup Oui
Onmouseout Oui
Onmouseover Oui
Onclick Oui
Ondblclick Oui
Onkeydown Oui
Onkeypress Oui
Onkeyup Oui
Onblur Oui
Onreadystatechange Oui

Vous pouvez attacher par programmation la plupart des événements dans un script. Les événements onmousedown, onmousemove, onmouseup, onmouseout, onmouseover, onclick, ondblclick, onkeydown, onkeypress et onkeyup peuvent tous être liés à la syntaxe suivante :

editor.document.attachEvent("Eventname", EventHandlerFunction)

Les liaisons onreadystatechange, onfocus et onblur peuvent être réinitialisées lorsque le contenu de l’élément <iframe> est rechargé. Par conséquent, vous pouvez lier ces événements de manière déclarative à l’aide d’attributs sur l’élément <iframe> si vous en avez besoin, ce qui conserve les liaisons entre les rechargements. L’exemple suivant montre des liaisons déclaratives pour ces événements :

<iframe ID="editor" SCROLLING="yes" onreadystatechange="editor_ReadyStateChange()"
  onfocus="editor_OnFocus" onblur="editor_Blur()"></iframe>

Vous pouvez ré-implémenter les fonctionnalités de l’événement DocumentComplete en gérant l’événement onreadystatechange et en incluant le test editor.document.readyState=="complete". Il s’agit d’un moment approprié pour rattacher d’autres événements (à l’exception de ceux indiqués précédemment) après le rechargement d’un document.

L’événement DisplayChanged n’est pas simple à réexéditer. Cet événement est déclenché très fréquemment dans le contrôle d’édition DHTML (y compris chaque fois que la souris se déplace), mais il est absolument nécessaire pour conserver les éléments d’interface utilisateur tels que les barres d’outils dans un état correct. Le contrôle d’édition DHTML déclenche l’événement DisplayChanged en réponse à la commande OLECMDID_UPDATECOMMANDS sur l’objet IOleCommandTarget du contrôle, qui n’est pas accessible au script. Pour simuler l’événement DisplayChanged , déclenchez-le de manière inconditionnelle en réponse aux événements onmousedown, onkeypress, onfocus, onreadystatechange, oncut, onpaste, ondrop, onmove et onselectionchange . En outre, elle doit être déclenchée pour onkeydown lorsque la touche est une touche de mouvement de curseur, et sur onkeyup lorsque la clé est l’une des touches d’accès rapide qui effectuent des modifications de mise en forme. L’événement DisplayChanged doit être déclenché lorsque les commandes qui définissent des valeurs sont exécutées, et peut être nécessaire pour onmousemove, selon que votre application change d’interface utilisateur en réponse à l’élément sur lequel le pointeur se déplace.

Vous pouvez détecter qu’une touche d’accès rapide a été enfoncée à l’aide de code tel que le suivant :

function IsHotKey(ev) {
    if(ev.ctrlKey && !ev.altKey) {
        var key = ev.keyCode;
        if((66 == key) || (73 == key) || (85 == key)) {
            return true;
        }
    }
    return false;
}

Pour détecter que les touches de déplacement du curseur ont été enfoncées, utilisez un script tel que le suivant :

function IsCursorMovementKey(key) {
    if(key >= 37 && key <= 40 || key == 9) {
        return true;
    }
    return false;
}

L’événement ShowContextMenu est à peu près équivalent à l’événement oncontextmenu DHTML, mais inclut les paramètres X et Y. Le modèle d’événement HTML ne fournit aucun moyen d’inclure des paramètres avec des événements. Par conséquent, vous devez modifier tous les gestionnaires pour l’événement ShowContextMenu ; toutes les références aux paramètres X et Y peuvent être remplacées par editor.document.event.x et editor.document.event.y.

L’événement ContextMenuAction est similaire à l’événement ShowContextMenu dans la mesure où les paramètres ne peuvent pas être inclus avec les événements, votre code nécessite donc une modification. Pour le remplacer, créez un objet d’événement en utilisant createEventObject(editor.document.event) que vous déclenchez en réponse à une sélection d’utilisateur. Définissez la propriété returnValue de l’objet d’événement sur l’ID de l’élément de menu sélectionné dans votre implémentation de menu contextuel. Dans le code d’hébergement, évaluez returnValue au lieu du paramètre itemIndex retourné par l’événement ContextMenuAction .

Valeurs commandID

Le tableau suivant répertorie les ID de commande utilisés avec les méthodes ExecCommand et QueryStatus dans le contrôle d’édition DHTML, ainsi que les commandes correspondantes (le cas échéant) utilisées avec la méthode execCommand DHTML.

Valeurs CommandID utilisées par ExecCommand et QueryStatus

Commande DHTMLEdit Cmd ID execCommand Notes
DECMD_BOLD 5 000 « Gras » Bascule
DECMD_COPY 5002 "Copy"  
DECMD_CUT 5003 "Cut"  
DECMD_DELETE 5004 "Delete"  
DECMD_DELETECELLS 5005   Aucune modification de tableau
DECMD_DELETECOLS 5006   Aucune modification de tableau
DECMD_DELETEROWS 5007   Aucune modification de tableau
DECMD_FINDTEXT 5008   Aucune boîte de dialogue
DECMD_FONT 5009   Aucune boîte de dialogue
DECMD_GETBACKCOLOR 5010 « BackColor » Valeur spéciale
DECMD_GETBLOCKFMT 5011   Réexédition
DECMD_GETBLOCKFMTNAMES 5012   Réexédition
DECMD_GETFONTNAME 5013 « FontName » Valeur
DECMD_GETFONTSIZE 5014 « FontSize » Valeur
DECMD_GETFORECOLOR 5015 « ForeColor » Valeur spéciale
DECMD_HYPERLINK 5016 « CreateLink »  
DECMD_IMAGE 5017 « InsertImage »  
DECMD_INDENT 5018 « Retrait »  
DECMD_INSERTCELL 5019   Aucune modification de tableau
DECMD_INSERTCOL 5020   Aucune modification de tableau
DECMD_INSERTROW 5021   Aucune modification de tableau
DECMD_INSERTTABLE 5022   Aucune modification de tableau
DECMD_ITALIC 5023 « Italique » Bascule
DECMD_JUSTIFYCENTER 5024 « JustifyCenter »  
DECMD_JUSTIFYLEFT 5025 « JustifyLeft »  
DECMD_JUSTIFYRIGHT 5026 « JustifyRight »  
DECMD_LOCK_ELEMENT 5027   Ordre de plan
DECMD_MAKE_ABSOLUTE 5028 « 2D-Position » Valeur
DECMD_MERGECELLS 5029   Aucune modification de tableau
DECMD_ORDERLIST 5030 « InsertOrderedList »  
DECMD_OUTDENT 5031 « Outdent »  
DECMD_PASTE 5032 "Paste"  
DECMD_REDO 5033   Aucune annulation
DECMD_REMOVEFORMAT 5034 « RemoveFormat »  
DECMD_SELECTALL 5035 « SelectAll »  
DECMD_SEND_BACKWARD 5036   Ordre de plan
DECMD_BRING_FORWARD 5037   Ordre de plan
DECMD_SEND_BELOW_TEXT 5038   Ordre de plan
DECMD_BRING_ABOVE_TEXT 5039   Ordre de plan
DECMD_SEND_TO_BACK 5040   Ordre de plan
DECMD_BRING_TO_FRONT 5041   Ordre de plan
DECMD_SETBACKCOLOR 5042 « BackColor » Valeur
DECMD_SETBLOCKFMT 5043 « FormatBlock » Valeur
DECMD_SETFONTNAME 5044 « FontName » Valeur
DECMD_SETFONTSIZE 5045 « FontSize » Valeur
DECMD_SETFORECOLOR 5046 « ForeColor » Valeur
DECMD_SPLITCELL 5047   Aucune modification de tableau
DECMD_UNDERLINE 5048 « Souligné » Bascule
DECMD_UNDO 5049   Aucune annulation
DECMD_UNLINK 5050 « Dissocier »  
DECMD_UNORDERLIST 5051 « InsertUnorderedList »  

Les commandes nommées (les commandes qui ont un nom dans la colonne execCommand dans le tableau précédent) peuvent être exécutées à l’aide de l’un des appels suivants : editor.document.execCommand(commandName) ou editor.document.execCommand(commandName, 0, parameter). La fonctionnalité représentée par les commandes sans nom n’est pas disponible dans la modification MSHMTL, à l’exception de celles indiquées comme « Réexédition ».

Les commandes sans nom disponibles via les méthodes ExecCommand et QueryStatus du contrôle d’édition DHTML ne peuvent pas être ré-implémentées en raison des limitations suivantes imposées par la modification MSHTML dans Internet Explorer :

  • Annulation. Les commandes d’annulation et de rétablissement ne sont pas prises en charge.
  • Ordre de plan. Les commandes D’ordre Z telles que Envoyer en arrière et Avancer peuvent être implémentées. Toutefois, étant donné que l’édition designMode ne prend pas en charge le repositionnement et le redimensionnement des éléments parfaitement positionnés, l’édition 3D est trop faible pour être utilisable, de sorte que ces commandes ne seront pas couvertes dans ce document.
  • Modification de tableau. Le contrôle d’édition DHTML incluait des commandes d’édition de table. Elles ne sont pas prises en charge par la modification MSHMTL, mais un modèle objet de table est disponible et peut vous aider à réimplémenter ces commandes si nécessaire.

Informations sur le format de bloc de lecture

L’équivalent de la commande DECMD_GETBLOCKFMT n’est pas pris en charge dans l’édition MSHMTL. Dans le contrôle, cette commande retourne le nom du bloc qui contient la sélection actuelle, en utilisant les noms utilisés par les commandes DECMD_SETBLOCKFMT et DECMD_GETBLOCKFMTNAMES . Une commande telle que DECMD_GETBLOCKFMT est nécessaire pour mettre à jour l’interface utilisateur de la barre de commandes pour la mise en forme des blocs. Vous pouvez estimer ses fonctionnalités à l’aide d’un script tel que le suivant :

var _blockFormats = {
    "BODY"    : "Normal",
    "P"       : "Normal",
    "PRE"     : "Formatted",
    "ADDRESS" : "Address",
    "H1"      : "Heading 1",
    "H2"      : "Heading 2",
    "H3"      : "Heading 3",
    "H4"      : "Heading 4",
    "H5"      : "Heading 5",
    "H6"      : "Heading 6",
    "OL"      : "Numbered List",
    "UL"      : "Bulleted List",
    "DIR"     : "Directory List",
    "MENU"    : "Menu List",
    "DT"      : "Definition Term",
    "DD"      : "Definition"
};

function GetBlockFmt() {
    try {
        var sel = editor.document.selection;
        if(undefined != sel) {
            var selEl = sel.createRange().parentElement();
            do {
                if(undefined == selEl) {
                    return "Normal";
                }
                var item = _blockFormats[selEl.tagName];
                if(undefined != item) {
                    return item;
                }
                selEl = selEl.parentElement;
            } while(true);
        }
    }
    catch(e) {
    }
    return "Normal";
}

La commande GetBlockFmtNames est inhabituelle dans le contrôle d’édition DHTML, car elle retourne un objet d’assistance personnalisé qui énumère les noms. Cela était nécessaire pour la compatibilité entre Visual Basic et JScript, mais n’est nécessaire dans aucune ré-implémentation. Vous pouvez utiliser l’objet Dialog Helper ({3050f819-98b5-11cf-bb82-00aa00bdce0b}) pour obtenir une liste énumérée de noms de format de blocs et une liste de polices. Pour plus d’informations, recherchez « Objet Dialog Helper » sur le Web. Vous devrez modifier votre code d’hébergement pour énumérer cette collection au lieu d’accéder à l’objet d’assistance d’origine.

Considérations supplémentaires relatives à la réexédition

Cette section présente d’autres considérations relatives à la ré-implémentation des fonctionnalités du contrôle d’édition DHTML.

Boîtes de dialogue

Les boîtes de dialogue Rechercher et police, qui sont implémentées dans Internet Explorer et que le contrôle appelle à l’aide d’ID de commande, ne sont pas exposées au script. Si vous disposez d’une interface utilisateur pour sélectionner des polices, vous devez la remplacer par une liste de noms de police que vous obtenez à partir de l’objet Dialog Helper.

Vous pouvez implémenter la commande Rechercher à l’aide d’un script tel que le suivant :

function Find() {
    var rng = editor.document.body.createTextRange();
    var txt = prompt("Enter text to search for", "");
    var found = rng.findText(txt);
    if(found) {
        rng.select();
    }
}

Valeurs des couleurs

Les propriétés DHTML BackColor et ForeColor retournent une valeur décimale, tandis que le contrôle d’édition DHTML renvoie une chaîne hexadécimale. Si votre code s’appuie sur des valeurs de couleur hexadécimales, utilisez un script tel que le suivant pour convertir les valeurs décimales en hexadécimales.

function DecToHexColor(dVal) {
    var hVal = dVal.toString(16);
    if (hVal.length < 6) {
        var temp = "000000".substring(0,6-hVal.length);
        hVal = temp.concat(hVal);
    }
    return hVal;
}

Commandes nommées

Les commandes restantes de la table précédente ont des noms qui peuvent être passés à la méthode editor.document.execCommand . Pour plus d’informations sur chaque commande, consultez la documentation sur les identificateurs de commande disponible à partir de la page Méthodes sur le site Web Microsoft.

Les commandes marquées « Bascule » dans le tableau précédent ne prennent aucun paramètre et basculent l’état de la sélection actuelle lors de son exécution. Les commandes marquées « Value » nécessitent une valeur lorsqu’une commande set est appelée et retournent une valeur lorsqu’une commande get est appelée. Les commandes sans notes sont exécutées sans paramètres.

Utilisation d’un composant HTML

À titre d’exemple de ré-implémentation réelle, nous avons mis à niveau Microsoft Outlook Web Access (OWA) pour qu’il fonctionne sans le contrôle d’édition DHTML sécurisé pour les scripts. Le contrôle ayant été incorporé dans l’application web pour plusieurs versions, le code dépendait fortement du modèle objet du contrôle.

Une exigence importante était de pouvoir ré-implémenter le comportement du contrôle tout en apportant le moins de modifications possible à l’application d’hébergement. Nous avons donc utilisé un composant HTML (HTC) Internet Explorer, un comportement. Il s’agit d’un composant écrit en DHTML et en script, et qui peut ensuite être instancié sur une page web à l’aide d’une balise de balisage personnalisée. En effet, non seulement nous avons ré-implémenté les fonctionnalités du contrôle d’édition DHTML, mais nous avons simulé le contrôle avec ce HTC. Le résultat était que nous n’avions besoin d’apporter qu’une poignée de modifications au code de prise en charge, et les efforts investis dans OWA étaient potentiellement transférables à d’autres applications.

Pour éviter les collisions possibles entre les éléments définis dans le script HTC et ceux de la page, nous avons implémenté le comportement en tant que HTC « lié à l’affichage ». Cela encapsule les éléments du comportement en les rendant invisibles pour l’application d’hébergement.

OWA avait déjà été codé pour rediriger vers différentes pages pour des navigateurs spécifiques. Nous avons donc pu créer de nouveaux modèles qui fournissaient des pages appropriées à des navigateurs spécifiques. La simulation du contrôle a réduit la nécessité de modifier le code prenant en charge les modèles.

Une déclaration d’un HTC dans un fichier nommé Surrogate.htc peut ressembler à ce qui suit :

<PUBLIC:COMPONENT tagName="SurrogateDhtmlEditor" supportsEditMode="true">
<PUBLIC:DEFAULTS tabStop="true" viewMasterTab="false"
  viewLinkContent="true"/>
  ...
  <PUBLIC:METHOD NAME="MethodName"/>
  ...
  <PUBLIC:PROPERTY NAME="PropName" PUT="put_Prop" GET="get_Prop"/>
  ...
</PUBLIC:COMPONENT>

<IFRAME ID="editor"
  SCROLLING="yes"
  onreadystatechange="EditorReadyStateChange()"
  onfocus="EditorFocus()"
  onblur="EditorBlur()">
</IFRAME>

<OBJECT ID="dlgHelper" WIDTH="0px" HEIGHT="0px"
  CLASSID="clsid:3050f819-98b5-11cf-bb82-00aa00bdce0b">
</OBJECT>
<SCRIPT language="javascript" src="SurrogateDhtmlEditor.js">

Pour instancier ce HTC dans une page web, vous pouvez effectuer les opérations suivantes :

<HTML xmlns:editing>
<HEAD>
<?IMPORT namespace="editing" implementation="controls/surrogate.htc" >
...
</HEAD>
<BODY>
...
<editing:SurrogateDhtmlEditor class="EditorClass" id="editor" height="200" width="100%" />
...
</BODY>
</HTML>

Le tableau suivant fournit des notes sur les éléments illustrés dans l’exemple précédent que vous remplacez par vos propres valeurs.

Élément Notes
xmlns:Édition Choisissez le nom souhaité pour l’espace de noms XML.
namespace="editing » Cela doit correspondre à l’espace de noms XML que vous avez spécifié.
implementation="controls/surrogate.htc » Il s’agit du chemin relatif du fichier HTC que vous utilisez.
<editing:SurrogateDhtmlEditor> Le préfixe de balise (editing) doit correspondre à l’espace de noms XML que vous avez spécifié. Le nom de la balise (SurrogateDhtmlEditor) doit correspondre à la valeur de l’attribut tagName dans la première ligne du fichier HTC.
id="editor » Il s’agit de l’ID que vous allez utiliser pour faire référence au composant d’édition dans votre application.

En utilisant un HTC, nous avons pu gérer toutes les fonctionnalités que nous avons implémentées à l’origine avec le contrôle d’édition DHTML d’une manière compatible avec Windows Vista. Le HTC n’a pas implémenté toutes les fonctionnalités du contrôle d’édition DHTML, mais nous avons pu implémenter toutes les fonctionnalités requises par OWA.

Résumé

Le contrôle d’édition DHTML sécurisé pour script ne sera pas disponible dans Windows Vista. Si vous avez des applications web qui s’appuient actuellement sur le contrôle, vous pouvez effectuer les opérations suivantes :

  • Recherchez un contrôle de remplacement tiers.
  • Réexémentez les fonctionnalités dont vous avez besoin avec un élément iframe> et un< script.
  • Remplacez le contrôle par un composant HTML Internet Explorer (HTC, un comportement) écrit dans un script qui encapsule les fonctionnalités dont vous avez besoin. Nous avons pu utiliser cette approche avec succès dans l’une des applications les plus importantes qui s’appuyaient sur le contrôle d’édition DHTML sécurisé pour les scripts, à savoir Outlook Web Access.

Le contrôle d’édition DHTML pour les applications et les objets document ActiveX TriEdit ne seront pas non plus inclus dans Windows Vista, mais seront disponibles en téléchargement séparément et peuvent être concédés sous licence pour distribution. Une fois ceux-ci installés sur Windows Vista, l’expérience utilisateur avec l’objet de contrôle ou de document est identique à celle des versions antérieures de Windows.