Windows Vista 以降の DHTML 編集コントロールの置き換え

 

Van Kichline
Microsoft Corporation

2006 年 8 月

概要: DHTML 編集コントロールは Windows Vista には含まれません。 コントロールを使用する Web ページと Windows アプリケーションは、WYSIWYG HTML エディターを提供し続けるために変更する必要があります。 (25ページ印刷)

適用対象:
   Windows Vista のインターネット エクスプローラー 7
   DHTML 編集コントロールをホストするインターネット エクスプローラー用の Web ページ
   DHTML Editing ActiveX コントロールまたは TriEdit ActiveX ドキュメントを使用する Windows アプリケーション

内容

はじめに
Windows アプリケーションへの影響
Web アプリケーションへの影響
まとめ

はじめに

DHTML 編集コントロールは、Web ページおよび Windows アプリケーションでの WYSIWYG HTML 編集用に設計された ActiveX コントロールです。 当初は、Microsoft Visual InterDev 開発チームによって 1998 年初頭に ActiveX コントロール ギャラリーにリリースされました。 インターネットエクスプローラーとコントロールの緊密な結合により、各インターネットエクスプローラー更新プログラムの一部としてコントロールを出荷することが望ましく、1999年初頭にインターネットエクスプローラー 5がリリースされて以来、インターネットエクスプローラーの一部としてコントロールが出荷されたことがすぐに明らかになりました。

いくつかの要因が組み合わされ、制御の継続的なサポートが時間の経過と同時に望ましくなくなります。 インターネット エクスプローラーは、インターネット エクスプローラー 5.5 およびインターネット エクスプローラー 6 で独自の WYSIWYG 編集機能を組み込み、進化を続けています。 同時に、セキュリティはインターネット エクスプローラーの主要な焦点となっています。 セキュリティを強化するために、ブラウザーは潜在的に危険なコンテンツへのアクセスを制限しますが、エディターは、変更されたコンテンツが安全に保持されるようにすることに重点を置いています。 いくつかのセキュリティ情報により、ブラウザー環境がロックダウンされ、DHTML 編集コントロールのユーティリティが削減され、所有権のコストが大幅に増加しました。

そのため、Windows Vista からコントロールを削除することを決定しました。 このコントロールは、Windows Vista のベータ 1 バージョンに存在していましたが、以降のベータ リリースおよび Windows Vista の最終リリースでは存在しません。

このペーパーでは、コントロールを使用する既存のアプリケーションに対するこの決定の影響、コントロールを使用するアプリケーションと Web ページを決定する方法、およびこれらのアプリケーションと Web ページに対するこの変更の影響を軽減する方法について説明します。

解剖学のレッスン

DHTML 編集コントロールでは"WYSIWYG HTML 編集" がサポートされています。これは、ユーザーが Web ページ上に表示される形式の HTML を表示しながら、コントロールにテキストを入力できることを意味します。 さまざまなコマンドを使用すると、ユーザーはフォント、色、書式設定を調整し、効果をすぐに確認できます。 これは、クライアント フォームでリッチ テキスト ボックス コントロールを使用する場合と似ていますが、コントロールによって保存されるデータは RTF ではなく HTML です。

DHTML 編集コントロールは、他の多くのコントロールよりも複雑です。 Dhtmled.ocx と TriEdit.dll の 2 つのコンポーネントで構成されます。 コンポーネントは、Windows Vista 用に削除された次のファイルにあります。

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

次に、2 つのコンポーネントで 5 つの異なるオブジェクトが実装されます。

Dhtmled.ocx

  • スクリプトの安全な DHTML 編集コントロール (DHTMLSafe)
  • アプリケーションの DHTML 編集コントロール (DHTMLEdit)
  • DEGetBlockFmtNamesParam ヘルパー オブジェクト
  • DEInsertTableParam ヘルパー オブジェクト

TriEdit.dll

  • TriEdit Document オブジェクト

スクリプトの安全な DHTML 編集コントロール、 DEGetBlockFmtNamesParam オブジェクト、および DEInsertTableParam オブジェクトのみがスクリプト作成に対して安全であるとマークされ、Web ページに作成できます。 DEGetBlockFmtNamesParamDEInsertTableParam は、DHTML 編集コントロールによって実装される一部のコマンドとの間でデータを渡すために排他的に使用される単純なオブジェクトです。

アプリケーションの DHTML 編集コントロールは、スクリプトの安全なコントロールを集計するより強力なバージョンのコントロールであり、Visual Basic や Delphi を使用して作成されたものなど、ActiveX ホスティング アプリケーションで使用することを目的としています。 このコントロールは、Windows Vista からも除外されています。 ただし、Microsoft は、このコントロールに依存するアプリケーションが Microsoft Vista で引き続き作業できるように、サード パーティがインストールできる、同じように動作するバージョンのコントロールをライセンスします。 詳細については、このドキュメントで後述する「Windows アプリケーションの軽減策」セクションを参照してください。

TriEdit Document オブジェクトは、DHTML 編集コントロールの両方のバージョンによって CoCreate でインスタンス化され、ActiveX Document ホスティング アプリケーションによって個別にインスタンス化できる ActiveX ドキュメントです。 ActiveX ドキュメントは、コントロールよりもホストが非常に複雑になる場合がありますが、編集画面の外観と統合をより直接的に制御できます。 アプリケーションの DHTML 編集コントロールと同様に、 TriEdit Document オブジェクトは、サードパーティ製の作業に似たオブジェクトを使用して Windows Vista でサポートされます。

WYSIWYG HTML 編集画面と、一般的な編集タスクに向いたプロパティ、メソッド、イベントのセットを提供するだけでなく、DHTML 編集コントロールオブジェクトと TriEdit Document オブジェクトの両方で、次の追加機能がサポートされます。

  • 複数レベルの元に戻してやり直します。
  • 基本的なテーブルの編集。
  • ドラッグ移動、サイズ変更、UI アクティブ化などの選択機能。
  • 絶対位置と Z 順序。
  • ソース コードの保持。
  • HTML タグ グリフのレンダリング。
  • デザイン時制御 (DTC) のサポート。 (これは Microsoft Visual InterDev で使用できる機能でした)。
  • キーボード アクセラレータ。

これらの機能の一部は、DHTML designMode プロパティを使用して実装される MSHTML 編集と呼ばれる機能を使用して、インターネット エクスプローラーに組み込まれています。 ただし、MSHTML 編集ですべての DHTML 編集コントロール機能がサポートされているわけではありません。 たとえば、DHTML 編集コントロールのソース コードを保持すると、HTML ソース コードの書式設定を保持できます。ソース コードの保持は、MSHTML 編集では使用できません。 インターネット エクスプローラーによって絶対位置と Z 順序が処理されるようになりました。 テーブルの編集はサポートされておらず、DTC でもありません。

DHTML 編集コントロールを特にソース コード保持機能のために使用する Web ページは、この変更によって深刻な影響を受けます。 この機能には便利な代替手段はなく、交換を実装するのは困難な技術的な問題です。

Windows アプリケーションへの影響

DHTML Editing Control for Applications を組み込んだ Windows アプリケーションは、Windows Vista で意図したとおりに機能しなくなります。 たとえば、Visual Basic アプリケーションでは、開かれたときに、またはコントロールを含むフォームがインスタンス化されたときに、次のメッセージが表示される場合があります。

コンポーネント 'dhtmled.ocx' またはその依存関係のいずれかが正しく登録されていません。ファイルが見つからないか無効です。

Delphi アプリケーションは、未処理の例外をスローする可能性があります。

影響を受ける Windows アプリケーションの決定

次のような構文を使用して、Visual Basic アプリケーションに Windows findstr コマンドを使用して DHTML 編集コントロールが含まれているかどうかを確認できます。

findstr /m DHTMLEDLibCtl.DHTMLEdit YourApplication.exe

Delphi アプリケーションには、文字列 "DHTMLEDLib_TLB" と "IDHTMLEdit" が含まれています。 したがって、次のコマンドを使用して、コントロールを使用する Visual Basic アプリケーションと Delphi アプリケーションの両方を検索できます。

findstr /im dhtmledlib YourApplication.exe

C および C++ アプリケーションでは、DHTML 編集コントロールを使用する代わりに TriEdit を直接使用できます。 タイプ ライブラリを読み込む代わりに、低レベル言語では、多くの場合、 CoCreateInstance メソッドを使用して OLE オブジェクトをインスタンス化します。 その場合、オブジェクトの作成に使用される GUID はアプリケーションにコンパイルされます。 コントロールと TriEdit ドキュメントの GUID は次のとおりです。

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

コンパイル済みコードを検索する必要がある場合は、GUID を表す特定のパターンを確認できます。 たとえば、次の GUID です。

{ABCDEFGH-IJKL-MNOP-QRST-UVWXYZ012345}

は、バイナリ内の次の 16 進シーケンスになります。

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

次の例は、これらの GUID の実行可能バイナリを検索する単純な C# プログラムを示しています。

// 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.");
      }
    }
  }
}

C、C++、およびその他の低レベル言語は、いくつかの方法で COM オブジェクトを自由にインスタンス化できるため、サンプルに示されているメソッドは、コントロールまたはドキュメント オブジェクトのすべてのインスタンスを見つける保証はありません。 このテストが負の場合は、Windows findstr コマンドを使用して、 や 2D360200などの 438DA5E0 GUID フラグメントのテキスト表現を検索します。 ソース コードが使用可能な場合は、慎重に調べます。 GUID フラグメントまたは "dhtmledit" や "triedit" などのテキストを検索します。 GUID をテキストとして表現するにはいくつかの方法があるため、GUID のフラグメントを検索することが重要です。 最初の 8 桁は連続しており、一般的に一意であるため、適切な検索パターンとして機能します。

Windows アプリケーションの軽減策

DHTML 編集コントロールと TriEdit は Windows Vista から削除されていますが、Microsoft では、署名された Microsoft Windows インストーラー (.msi ファイル) にパッケージ化されたコンポーネントとして、両方のバイナリ コンポーネントを ISV で使用できるようにします。 このパッケージには、スクリプトの安全なバージョンの DHTML 編集コントロールは含まれません。 ライセンス情報は、このインストーラーによって表示されるエンド ユーザー 使用許諾契約書に含まれています。 パッケージをインストールまたは再配布する前に、これを注意深く確認してください。

Windows インストーラーを入手するには、 Microsoft ダウンロード センター Web サイトにアクセスしてください。 このインストーラーは署名され、コントロールと TriEdit 用の署名付きバイナリが含まれており、どちらも Windows Vista で使用するように変更されています。 このパッケージは Windows Vista にのみインストールされます。 Windows XP などの以前のバージョンの Windows では実行されません。 以前のバージョンの Windows でインストーラーを実行しようとすると、ダイアログ ボックスにエラーが表示されます。

このインストーラーは Windows Vista 用に設計されており、インストールは停止します。

ファイルをインストールするには、ファイルをダブルクリックし、右クリックして [ インストール] を選択するか、次のコマンドを実行します。

msiexec /i dhtmled.msi

これにより、Dhtmled.ocx と Triedit.dllがインストールされ、次のディレクトリに登録されます。

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

コントロールをインストールすると、Windows コントロール パネルの [プログラムの追加と削除] アプリケーションに "DHTML 編集コンポーネント" エントリが追加されます。

Windows Vista バージョンのバイナリ コンポーネントがインストールされると、DHTML Editing Control for Application と TriEdit のユーザー エクスペリエンスは、以前のバージョンの Windows のユーザー エクスペリエンスと区別できなくなります。 すべての機能が保持され、すべての GUID、ProgID、タイプ ライブラリ名などが同じです。 (Windows Vista では省略されている、スクリプトの安全な DHTML 編集コントロールのユーザー エクスペリエンスに違いがあります。詳細については、このドキュメントで後述する「Web アプリケーションに対する影響」セクションを参照してください。

レガシ アプリケーション

Dhtmled.msi インストーラーを使用する場合、レガシ アプリケーションは常に Windows Vista で動作します。 新しいバイナリ コンポーネントをインストールしていない場合、アプリケーションの DHTML 編集コントロールを含むレガシ アプリケーションでは、Windows Vista で実行されるときにさまざまなエラー モードが表示されます。 アプリケーション ベンダーの場合は、Windows Vista インストーラーを直接入手するための更新プログラムを提供するか、指示をエンド ユーザーに送信できます。その後、ユーザーは Windows Vista のバージョンを自分でインストールし、引き続きアプリケーションを使用できます。 Windows Vista のインストール後にエラーが発生したユーザーは、カスタマー サービスに問い合わせる前に、Web でエラー メッセージのテキストと製品の名前を検索する可能性があります。 したがって、インストーラーの検索に関する情報を投稿する必要があります。 Windows Vista バージョンのバイナリ コンポーネントのダウンロードとインストールは、ほとんどのユーザーにとって簡単です。

新しいアプリケーション

新しいアプリケーションの場合は、製品の一部としてインストーラーを配布し (適切なライセンスを持つ)、独自のインストーラーからそれにチェーンすることができます。 インストーラーは、Windows のインストール済みプログラムの一覧に項目を追加しなくても、サイレントモードで実行できます。 (詳細については、MsiExec.exeのドキュメントを参照してください)。

ただし、インストーラーでは、インストールされているプログラムの一覧に DHTML 編集コントロールを追加できるようにすることをお勧めします。 さらに、アプリケーションをアンインストールするときは、コントロールをアンインストールしないでください。代わりに、お客様が必要に応じて個別にアンインストールできるようにします。

このインストール方法では、ロゴに準拠したインストールは提供されないことに注意してください。 この軽減策は、次の理由で受け入れられると判断されました。

  • コンポーネントを含むアプリケーションの数は限られています。
  • これらのアプリケーションのいくつかをホストする 1 台のコンピューターの可能性は低くなります。
  • DHTML 編集コントロールをアンインストールしている別のアプリケーションによってアプリケーション 壊れた場合は、プログラムの 追加または削除 アプリケーションで使用可能な [修復] オプションを使用して、壊れたアプリケーションを簡単に修復できます。

アプリケーションでロゴコンプライアンスが必要な場合は、Windows Vista 用 DHTML 編集コントロールを個別にインストールするようにユーザーに指示する必要があります。

Web アプリケーションへの影響

インターネット エクスプローラー 5 がリリースされたため、DHTML 編集コントロールは HTML、ASP、ASP.NET ページ、および HTTP でアクセスされるその他のドキュメントで使用できます。 Windows Vista では、スクリプトの安全な DHTML 編集コントロールを使用する Web ページは、コントロールの読み込みに失敗します。 代わりに、画像プレースホルダーが表示されます。

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

さらに、コントロールを参照するスクリプトは例外をスローします。 スクリプト例外はスクリプトの評価を終了するため、スクリプトによって制御される関連のない機能も動作しない可能性があります。 したがって、スクリプトの安全な DHTML 編集コントロールを含み、Windows Vista クライアントで使用できるページを変更または再ターゲットする必要があります。

メモもともと、アプリケーションの DHTML 編集コントロール (スクリプト作成に安全ではないコントロール) は Web ページでも使用できましたが (警告メッセージ付き)、インターネット エクスプローラー 6 のリリースでは、コントロール内のセキュリティ強化により、Web ページでアプリケーションのバージョンが事実上使用できなくなります。 機能的な Web ページがアプリケーションの DHTML 編集コントロールをインスタンス化する可能性はほとんどありません。

影響を受ける Web ページの決定

スクリプトの安全な DHTML 編集コントロールを含む Web ページでは、次のようなオブジェクト> タグとして<実装されます。

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

コントロールを使用する多くの Web ページは、Microsoft Visual InterDev で作成されたか、Visual InterDev によって生成されたコード例を使用していました。 その場合、マークアップは次のようになります。

<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>

追加のタグは、 コントロールでサポートされているパラメーターの初期化値を表します。 コントロールのプロパティ バッグを保持する Web ページ デザイン アプリケーションには、ページの保存時に、これらの PARAM タグと HTML コンテンツが含まれます。

最も効果的なクイック チェックは、Web ページのストアで共通の GUID (2D360201-FFF5-11D1-8D03-00A0C959BC0A) またはフラグメント のみを検索することです2D360201。 このテキストを含むページには、ほぼ確実にスクリプトの安全な DHTML 編集コントロールが含まれています。

Web アプリケーションの軽減戦略

Windows Vista から DHTML 編集コントロールと TriEdit が削除されたことに応じて、Microsoft は、署名された Windows インストーラー (.msi ファイル) にパッケージ化されたシステム コンポーネントとして DHTML Editing Control for Applications と TriEdit を使用できるようにしました。 ただし、このパッケージには、スクリプトの安全なバージョンの DHTML 編集コントロールは含まれません。

DHTML 編集コントロールが実装する機能の多くは、インターネット エクスプローラーで MSHTML 編集 (つまり、designMode プロパティを使用して) で直接使用できます。 そのため、多くの場合、コントロールの機能は MSHTML 編集に置き換えることができます。たとえば、 <このドキュメントで後述するように、iframe> 要素をデザイン モードに設定します。

代替コントロールの使用

軽減策の 1 つは、代替の ActiveX コントロールまたは ASP.NET カスタム コントロールを代替として使用する方法です。 Web で "HTML WYSIWYG エディター コントロール" を検索すると、いくつかの候補が提案されます。 Microsoft は、これらの製品に関する調査を実施していないため、推奨事項を作成できません。 そのため、ニーズに最適な方法を決定する必要があります。 置換は、DHTML 編集コントロールとは異なるオブジェクト モデルを持つ可能性が高く、コントロールを使用してページ上のサポート スクリプトを変更する必要があります。 この変更の難しさは、実装の洗練度によって異なります。

選択的リダイレクトの実装

Windows で実行されているインターネット エクスプローラー ブラウザーのみが、スクリプトの安全な DHTML 編集コントロールをインスタンス化できます。 したがって、さまざまなブラウザーを対象とした "リーチ" アプリケーションがある場合は、既にブラウザーの検出とリダイレクトがアプリケーションに組み込まれている可能性があります。 たとえば、アプリケーションはインターネット エクスプローラー要求をコントロールを含むページにリダイレクトし、他のブラウザー要求を別の入力手段を使用するページにリダイレクトする場合があります。

要求で送信されたユーザー エージェント文字列を調べることで、要求が Windows Vista を使用して送信されたかどうかを判断できます。 Windows Vista 上のインターネット エクスプローラー 7 のユーザー エージェント文字列は、次のようになります。

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)

C# の次の例は、Windows Vista およびインターネット エクスプローラー 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");
}

VISUAL Basic Scripting Edition (VBScript) for ASP では、次のコードで同じタスクが実行されます。

<% @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
%>

編集機能の再実装

DHTML 編集コントロールの機能が絶対に必要であり、置換が実用的でない場合は、MSHTML の編集とスクリプトを使用してコントロールの機能を再実装することをお勧めします。 MSHTML 編集は、インターネット エクスプローラー 5.5 以降のバージョンで使用できます。DHTML 編集コントロールは、インターネット エクスプローラー 5.0 以降のバージョンで使用できます。 したがって、機能を再実装する場合でも、インターネット エクスプローラー 5.0 を持つユーザーに対して DHTML 編集コントロールを含むリダイレクトされたページを提供する必要がある場合があります。

このセクションでは、iframe> 要素を使用して、スクリプトの安全な DHTML 編集コントロールの機能を再実装する方法の 1 つを<示します。 次のようなページを使用して、基本的な編集機能を実装できます。

<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>

このページには、書式設定された HTML を含む編集可能な領域が表示されます。 この領域に入力し、Ctrl + I などのホット キーを使用して斜体を切り替え、Ctrl キーを押しながら下線を切り替えることができます。 [送信] ボタンを押すと、メッセージ ボックスに iframe> 要素の HTML コンテンツが<表示されます。 DHTML 編集コントロールのプロパティ、メソッド、およびイベントに相当するものを実装するには、スクリプトを使用する必要があります。

セキュリティ上の理由から、iframe> 境界を越えてアクセスできるのは同じドメインの<コンテンツのみです。 フレームのコンテンツに確実にアクセスできるようにするには、次の例のように src 属性を使用して、同じドメイン内の URL からフレームを初期化します。

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

Internet エクスプローラー の designMode プロパティを使用した編集の詳細については、Microsoft Web サイトの MSHTML 編集の概要に関するページを参照してください。

メソッド

次の表に、スクリプトの安全な DHTML 編集コントロールのメソッドと、インターネット エクスプローラーのスクリプトを使用して再実装できるかどうかを示します。

スクリプトの安全な DHTML 編集コントロールのメソッド

コマンド 耐え。
Execcommand 部分的
QueryStatus 部分的
SetContextMenu はい
NewDocument はい
LoadURL はい
FilterSourceCode いいえ
[更新] 必要なし

ExecCommand メソッドと QueryStatus メソッドは、 オブジェクトの コマンドと クエリ コマンドをeditor.document呼び出editor.document.execCommandすことによって置き換えることができます。 DHTML 編集コントロールによって実装されるコマンドのサブセットは、このドキュメントで後述する「CommandID 値」セクションで説明されているように、スクリプトを使用して使用できます。

MSHTML 編集で QueryStatus メソッドの機能を取得するには、次のようなコードを含める必要があります。

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;
        }
    }
}

メソッドに関するその他の注意事項

SetContextMenu メソッドは、文字列の配列と状態 (MENU_UNCHECKED=0、、) MENU_GRAY=2の配列を受け取り、MENU_CHECKED=1エディターによって oncontextmenu イベントが発生するまで格納します。 このメソッドの代わりに、使用可能な HTML コンテキスト メニューの実装の 1 つを使用します (ほとんどの場合、 createPopup メソッドを使用します)。

UseDivOnCarriageReturn プロパティをサポートしている場合、再読み込みするコンテンツはプロパティの値に条件付きになります。 Dirty プロパティをサポートしている場合は、新しいドキュメントを作成するときにクリアします。

NewDocument メソッドは、エディターの内容を空白のドキュメントに置き換えます。 このコマンドの代わりに、次のようなスクリプトを使用できます。

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();
}

LoadURL メソッドの代わりに を使用するには、 などのeditor.src=urlコードを使用します。 Dirty プロパティをサポートしている場合は、新しいドキュメントを読み込むときにクリアします。

FilterSourceCode メソッドはソース コードの保存用であり、スクリプトで再実装することはできません。 互換性のためにこのメソッドを定義する必要がある場合は、次の例に示すように、パラメーターを返します。

function FilterSourceCode(str) { return str; }

Refresh メソッドはコントロール ウィンドウの四角形を無効にし、再実装で次に示すように、何も行わないメソッドに置き換えることができます。

function Refresh() {}

プロパティ

次の表に、スクリプトの安全な DHTML 編集コントロールのプロパティと、インターネット エクスプローラーのスクリプトを使用して再実装できるかどうかを示します。

スクリプトの安全な DHTML 編集コントロールのプロパティ

プロパティ データ型 Direction 耐え。
CurrentDocumentPath String アウト はい
Dom Object アウト はい
DocumentHTML String /アウトの選択 はい
IsDirty Boolean アウト 部分的
SourceCodePreservation Boolean /アウトの選択 いいえ
ActivateApplets Boolean /アウトの選択 いいえ
ActivateDTCs Boolean /アウトの選択 いいえ
ActivateActiveXControls Boolean /アウトの選択 いいえ
ShowDetails Boolean /アウトの選択 いいえ
ShowBorders Boolean /アウトの選択 いいえ
AbsoluteDropMode Boolean /アウトの選択 いいえ
スクロールバー Boolean /アウトの選択 はい
外観 Special /アウトの選択 はい
ScrollbarAppearance Special /アウトの選択 はい
SnapToGridX Long /アウトの選択 いいえ
SnapToGridY Long /アウトの選択 いいえ
SnapToGrid Boolean /アウトの選択 いいえ
BaseURL String /アウトの選択 はい
DocumentTitle String アウト はい
UseDivOnCarriageReturn Boolean /アウトの選択 はい
忙しい Boolean アウト はい

プロパティに関するその他の注意事項

CurrentDocumentPath プロパティを実装するには、 を返しますeditor.location.href

DOM プロパティは と同じですeditor.document

DocumentHTML プロパティは としてeditor.getElementsByTagName('HTML')[0].outerHTML実装できます。

IsDirty プロパティを正確に置き換えることはできません。 これを概算するには、ドキュメントを変更するすべてのメソッド、プロパティ、およびコマンドに対して、エディター <iframe> 要素に関連付けられているグローバル変数を設定します。 oncut、onpasteondroponmove など、さまざまなイベントによってドキュメントがダーティされる可能性があります。 詳細については、このドキュメントの後半の「イベント」の DisplayChanged イベントに関するメモを参照してください。 NewDocumentLoadURL などのメソッドは、グローバル ダーティ フラグをクリアする必要があります。

SourceCodePreservationActivateAppletsActivateDTCsActivateActiveXControlsShowDetailsShowBordersAbsoluteDropModeSnapToGridSnapToGridXSnapToGridY の各プロパティは、スクリプトに実装できません。

Appearance プロパティは、DHTML 編集コントロール自体の境界線の外観を設定します。 再実装では、 を設定 editor.frameBorderできます。

Scrollbars プロパティは、"Yes" または "No" に設定editor.body.scrollすることで実装できます。 比較 ( を使用して取得できます。editor.body.scroll=="no")

ScrollbarAppearance プロパティを再実装するには、CSS 属性を使用します。 (詳細については、Web で "CSS フラット スクロール バー" を検索してください)。

DocumentTitle プロパティは に置き換editor.document.titleえることができます。

UseDivOnCarriageReturn プロパティは、ENTER キーの動作を (間接的に) 指定できるように設計されています。 既定では、編集可能な HTML 領域で Enter キーを押すと、p> 要素が<挿入されます。 DHTML 編集コントロールでは、Enter キーを押すと、ユーザーが入力しているブロック要素が 2 つの同様のブロックに分割されます。 カーソルが p> 要素内にある<場合は、同様の属性を持つ別<の p> 要素が作成されます。 カーソルが div> 要素内にある場合は、別の< div >要素が作成されます。<

UseDivOnCarriageReturn プロパティは、NewDocument メソッドを呼び出して空白のドキュメントを作成するときに使用される既定のブロック要素を指定します。 プロパティが true に設定されている場合、既定のブロックは div> 要素であり、最初のテキストは<次のようになります。

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

それ以外の場合、最初のテキストは次のようになります。

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

Busy プロパティは、コントロールが現在読み込まれていることを示します。 これは に置き換 editor.document.readyState != "complete"えることができます。

BaseURL プロパティの再実装

BaseURL プロパティは、相対 URL の解決に使用される URL のルート部分を設定します。 この点で、DHTML 編集コントロールと MSHTML 編集の動作方法には大きな違いがあります。 DHTML 編集コントロールがインターネット エクスプローラー 4 で最初に導入されたとき、ドキュメント オブジェクト モデル (DOM) には head> 要素への<アクセスが含まれなかったため、<基本>要素をプログラムでドキュメントに追加できませんでした。 代わりに、コントロールは内部的に相対 URL と BaseURL プロパティに格納されているベース URL を組み合わせます。 現在のバージョンのインターネット エクスプローラーでは、<基本>要素をエディター ドキュメントに簡単に追加できますが、この手法を使用すると、 要素がプロパティのコンテンツの一部editor.documentになるため、コントロールの BaseURL プロパティとは異なる動作が発生します。 したがって、BaseURL プロパティのコントロールの動作をシミュレートするには、ドキュメントのコンテンツから HTML コンテンツを取得した後に、ドキュメントから基本>要素を削除<する必要があります。 BaseURL プロパティの再実装は簡単ではありません。意図した動作が表示されていることを確認するために、アプリケーションを慎重にテストする必要があります。

もう 1 つの違いは、DHTML 編集コントロールによって IDM_NOFIXUPURLSONPASTE コマンドが実行され、スクリプトからは使用できない点です。 このコマンドを実行すると、コンテンツを編集可能な領域に貼り付けると、相対 URL が絶対 URL に変更されなくなります。 この修正を <オーバーライドするように基本> 要素を設定することも、正規表現を使用してこの違いを修正することもできます。

ドキュメントの <基本> 要素タグ値を取得するには、次のようなスクリプトを使用します。

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;
    }
}

ドキュメントの基本>要素を<設定するには、次のようなスクリプトを使用します。

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;
}

プロパティのコンテンツから返されるテキストからベース> タグを削除するには、次のようなスクリプトを使用します。<editor.document

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

イベント

次の表に、スクリプトの安全な DHTML 編集コントロールのイベントと、インターネット エクスプローラーのスクリプトを使用して再実装できるかどうかを示します。

スクリプトの安全な DHTML 編集コントロールのイベント

イベント 耐え。
DocumentComplete はい
DisplayChanged 部分的
ShowContextMenu(xPos,yPos) はい(変更あり)
ContextMenuAction(itemIndex) はい(変更あり)
Onmousedown はい
Onmousemove はい
Onmouseup はい
Onmouseout はい
Onmouseover はい
Onclick はい
Ondblclick はい
Onkeydown はい
Onkeypress はい
Onkeyup はい
Onblur はい
Onreadystatechange はい

ほとんどのイベントをスクリプトにプログラムでアタッチできます。 イベント onmousedownonmousemoveonmouseuponmouseoutonmouseoveronclickondblclickonkeydownonkeypressonkeyup はすべて、次のような構文でバインドできます。

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

iframe> 要素の内容が再読み込みされると、onreadystatechange、onfocus、onblur の<バインドがリセットされる場合があります。 そのため、必要に応じて iframe> 要素の属性を使用して宣言的に<これらのイベントをバインドできます。これにより、再読み込み間でバインドが保持されます。 次の例は、これらのイベントの宣言型バインディングを示しています。

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

DocumentComplete イベントの機能を再実装するには、onreadystatechange イベントを処理し、テスト editor.document.readyState=="complete"を含めることができます。 これは、ドキュメントの再読み込み後に他のイベント (前述のものを除く) を再アタッチするのに適したタイミングです。

DisplayChanged イベントを簡単に再実装することはできません。 このイベントは DHTML 編集コントロールで頻繁に発生します (マウスが動くたびに含まれます)、ツールバーなどの UI 要素を正しい状態に保つためには絶対に必要です。 DHTML 編集コントロールは、スクリプトにアクセスできないコントロールの IOleCommandTarget オブジェクトのOLECMDID_UPDATECOMMANDS コマンドに応答して DisplayChanged イベントを発生させます。 DisplayChanged イベントをシミュレートするには、onmousedownonkeypressonfocusonreadystatechangeoncutonpasteondroponmoveonselectionchange イベントに応答して無条件に発生させます。 また、キーがカーソル移動キーの場合は onkeydown に対して、キーが書式設定の変更を実行するホットキーの 1 つである場合は onkeyup に対して発生する必要があります。 DisplayChanged イベントは、値を設定するコマンドが実行されるときに発生する必要があり、ポインターが移動する要素に応じてアプリケーションが UI を変更するかどうかに応じて、onmousemove に必要になる場合があります。

次のようなコードを使用して、ホットキーが押されたことを検出できます。

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

カーソル移動キーが押されたことを検出するには、次のようなスクリプトを使用します。

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

ShowContextMenu イベントは DHTML oncontextmenu イベントとほぼ同じですが、X パラメーターと Y パラメーターが含まれます。 HTML イベント モデルでは、イベントにパラメーターを含める方法はありません。 したがって、ShowContextMenu イベントのハンドラーを変更する必要があります。X パラメーターと Y パラメーターへの参照は、 と editor.document.event.yeditor.document.event.x置き換えることができます。

ContextMenuAction イベントは ShowContextMenu イベントに似ていますが、パラメーターをイベントに含めることはできません。そのため、コードで変更が必要になります。 これを置き換えるには、ユーザーの選択に応じて発生させる イベント オブジェクトを使用 createEventObject(editor.document.event) して作成します。 イベント オブジェクトの returnValue プロパティを、コンテキスト メニューの実装で選択したメニュー項目の ID に設定します。 ホスティング コードで、ContextMenuAction イベントによって返される itemIndex パラメーターの代わりに returnValue を評価します。

CommandID 値

次の表に、DHTML 編集コントロールの ExecCommand メソッドと QueryStatus メソッドで使用されるコマンド ID と、DHTML execCommand メソッドで使用される対応するコマンド (存在する場合) を示します。

ExecCommand と QueryStatus によって使用される CommandID 値

DHTMLEdit コマンド Cmd ID Execcommand メモ
DECMD_BOLD 5000 "太字" トグル
DECMD_COPY 5002 "コピー"  
DECMD_CUT 5003 "切り取り"  
DECMD_DELETE 5004 "削除"  
DECMD_DELETECELLS 5005   テーブルの編集なし
DECMD_DELETECOLS 5006   テーブルの編集なし
DECMD_DELETEROWS 5007   テーブルの編集なし
DECMD_FINDTEXT 5008   ダイアログ ボックスなし
DECMD_FONT 5009   ダイアログ ボックスなし
DECMD_GETBACKCOLOR 5010 "BackColor" 特別な値
DECMD_GETBLOCKFMT 5011   再実装
DECMD_GETBLOCKFMTNAMES 5012   再実装
DECMD_GETFONTNAME 5013 "FontName"
DECMD_GETFONTSIZE 5014 "FontSize"
DECMD_GETFORECOLOR 5015 "ForeColor" 特殊な値
DECMD_HYPERLINK 5016 "CreateLink"  
DECMD_IMAGE 5017 "InsertImage"  
DECMD_INDENT 5018 "インデント"  
DECMD_INSERTCELL 5019   テーブルの編集なし
DECMD_INSERTCOL 5020   テーブルの編集なし
DECMD_INSERTROW 5021   テーブルの編集なし
DECMD_INSERTTABLE 5022   テーブルの編集なし
DECMD_ITALIC 5023 "斜体" トグル
DECMD_JUSTIFYCENTER 5024 "JustifyCenter"  
DECMD_JUSTIFYLEFT 5025 "JustifyLeft"  
DECMD_JUSTIFYRIGHT 5026 "JustifyRight"  
DECMD_LOCK_ELEMENT 5027   Z オーダー
DECMD_MAKE_ABSOLUTE 5028 "2D-Position"
DECMD_MERGECELLS 5029   テーブルの編集なし
DECMD_ORDERLIST 5030 "InsertOrderedList"  
DECMD_OUTDENT 5031 "Outdent"  
DECMD_PASTE 5032 "貼り付け"  
DECMD_REDO 5033   元に戻さない
DECMD_REMOVEFORMAT 5034 "RemoveFormat"  
DECMD_SELECTALL 5035 "SelectAll"  
DECMD_SEND_BACKWARD 5036   Z オーダー
DECMD_BRING_FORWARD 5037   Z オーダー
DECMD_SEND_BELOW_TEXT 5038   Z オーダー
DECMD_BRING_ABOVE_TEXT 5039   Z オーダー
DECMD_SEND_TO_BACK 5040   Z オーダー
DECMD_BRING_TO_FRONT 5041   Z オーダー
DECMD_SETBACKCOLOR 5042 "BackColor"
DECMD_SETBLOCKFMT 5043 "FormatBlock"
DECMD_SETFONTNAME 5044 "FontName"
DECMD_SETFONTSIZE 5045 "FontSize"
DECMD_SETFORECOLOR 5046 "ForeColor"
DECMD_SPLITCELL 5047   テーブルの編集なし
DECMD_UNDERLINE 5048 "下線" トグル
DECMD_UNDO 5049   元に戻さない
DECMD_UNLINK 5050 "リンク解除"  
DECMD_UNORDERLIST 5051 "InsertUnorderedList"  

名前付きコマンド (前の表の execCommand 列に名前を持つコマンド) は、 または editor.document.execCommand(commandName, 0, parameter)のいずれかの呼び出し editor.document.execCommand(commandName)を使用して実行できます。 名前のないコマンドで表される機能は、MSHMTL 編集では使用できません。ただし、「再実装」と記載されている機能を除きます。

DHTML 編集コントロールの ExecCommand メソッドと QueryStatus メソッドで使用できる名前のないコマンドは、インターネット エクスプローラーでの MSHTML 編集によって課される次の制限のため、再実装できません。

  • 元に戻す。 元に戻すコマンドとやり直しコマンドはサポートされていません。
  • Z オーダー[後方に移動] や [前に進む] などの Z オーダー コマンドを実装できます。 ただし、 designMode 編集では絶対位置の要素の位置変更とサイズ変更がサポートされていないため、3-D 編集は弱すぎて使用できないため、これらのコマンドについてはこのドキュメントでは説明しません。
  • テーブルの編集。 DHTML 編集コントロールには、いくつかのテーブル編集コマンドが含まれていました。 これらは MSHMTL 編集ではサポートされていませんが、必要に応じてこれらのコマンドを再実装するのに役立つテーブル オブジェクト モデルを使用できます。

ブロック形式情報の読み取り

MSHMTL 編集では 、DECMD_GETBLOCKFMT コマンドと同等のコマンドはサポートされていません。 コントロールでは、このコマンドは、DECMD_SETBLOCKFMTコマンドと DECMD_GETBLOCKFMTNAMES コマンドで使用される名前を使用して、現在の選択範囲を含むブロックの名前 返します。 DECMD_GETBLOCKFMTのようなコマンドは、ブロックを書式設定するためのコマンド バー UI を更新するために必要です。 次のようなスクリプトを使用して、その機能を概算できます。

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";
}

GetBlockFmtNames コマンドは、名前を列挙するカスタム ヘルパー オブジェクトを返すので、DHTML 編集コントロールでは通常とは異なっています。 これは Visual Basic と JScript の互換性のために必要でしたが、再実装では必要ありません。 ダイアログ ヘルパー オブジェクト ({3050f819-98b5-11cf-bb82-00aa00bdce0b}) を使用して、ブロック形式名の列挙リストとフォントの一覧を取得できます。 詳細については、Web で "ダイアログ ヘルパー オブジェクト" を検索してください。 元のヘルパー オブジェクトにアクセスするのではなく、このコレクションを列挙するようにホスティング コードを変更する必要があります。

追加の再実装に関する考慮事項

このセクションでは、DHTML 編集コントロールの機能を再実装するための追加の考慮事項について説明します。

ダイアログ ボックス

インターネット エクスプローラーに実装され、コマンド ID を使用してコントロールが呼び出す [検索] ダイアログ ボックスと [フォント] ダイアログ ボックスはスクリプトに公開されません。 フォントを選択するための UI がある場合は、ダイアログ ヘルパー オブジェクトから取得したフォント名の一覧に置き換える必要があります。

次のようなスクリプトを使用して Find コマンドを実装できます。

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();
    }
}

色の値

DHTML BackColor プロパティと ForeColor プロパティは 10 進値を返しますが、DHTML 編集コントロールは 16 進数の文字列を返します。 コードが 16 進数の色値に依存している場合は、次のようなスクリプトを使用して、10 進数の値を 16 進数に変換します。

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;
}

名前付きコマンド

前の表の残りのコマンドには、 editor.document.execCommand メソッドに渡すことができる名前があります。 各コマンドの詳細については、Microsoft Web サイトの メソッド ページから入手できるコマンド識別子に関するドキュメントを参照してください。

前の表で "Toggle" とマークされたコマンドは、パラメーターを受け取らなくなり、現在の選択範囲の実行時の状態を切り替えます。 "Value" とマークされたコマンドは、set コマンドが呼び出されたときに値を必要とし、get コマンドが呼び出されたときに値を返します。 メモのないコマンドは、パラメーターなしで実行されます。

HTML コンポーネントの使用

実際の再実装の例として、Microsoft Outlook Web Access (OWA) を、スクリプトの安全な DHTML 編集コントロールなしで動作するように改良しました。 コントロールは複数のバージョンの Web アプリケーションに埋め込まれているため、コードはコントロールのオブジェクト モデルに大きく依存していました。

重要な要件は、ホスティング アプリケーションにできるだけ少ない変更を加えながら、コントロールの動作を再実装できることでした。 そのため、インターネット エクスプローラー HTML コンポーネント (HTC) (動作) を使用しました。 これは、DHTML とスクリプトで記述され、カスタム マークアップ タグを使用して Web ページでインスタンス化できるコンポーネントです。 実際には、DHTML 編集コントロールの機能を再実装しただけでなく、このHTCでコントロールをシミュレートしました。 その結果、サポート コードに変更を加える必要はほんのわずかであり、OWA に投資した作業は他のアプリケーションに移転できる可能性があります。

HTCスクリプトで定義されている要素とページ上の要素の衝突を回避するために、動作を「ビューリンク」のHTCとして実装しました。 これにより、動作の要素がホスティング アプリケーションに対して非表示にされ、カプセル化されます。

OWA は既に特定のブラウザーの異なるページにリダイレクトするようにコーディングされているため、特定のブラウザーに適切なページを配信する新しいテンプレートを作成できました。 コントロールをシミュレートすると、テンプレートをサポートするコードを変更する必要が減ります。

Surrogate.ht という名前のファイル内のHTCの宣言は、次のようになります。

<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">

Web ページでこのHTCをインスタンス化するには、次の操作を行います。

<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>

次の表に、前の例で示した要素に関するメモを、独自の値に置き換えます。

要素 メモ
xmlns:編集 XML 名前空間に必要な任意の名前を選択します。
namespace="editing" これは、指定した XML 名前空間と一致している必要があります。
implementation="controls/surrogate.htc" これは、使用しているHTCファイルへの相対パスです。
<editing:SurrogateDhtmlEditor> タグ プレフィックス (editing) は、指定した XML 名前空間と一致する必要があります。 タグ名 (SurrogateDhtmlEditor) は、HTC ファイルの最初の行にある tagName 属性の値と一致する必要があります。
id="editor" これは、アプリケーションの編集コンポーネントを参照するために使用する ID です。

HTCを使用することで、最初にDHTML編集コントロールで実装していたすべての機能を、Windows Vistaと互換性のある方法で維持することができました。 HTCはDHTML編集コントロールのすべての機能を実装していませんが、OWAが必要とするすべての機能を実装することができました。

まとめ

スクリプトの安全な DHTML 編集コントロールは、Windows Vista では使用できません。 現在コントロールに依存している Web アプリケーションがある場合は、次の操作を実行できます。

  • サード パーティの置換コントロールを探します。
  • iframe 要素とスクリプトを使用して、必要な機能を<再実装します。>
  • コントロールを、必要な機能をカプセル化するスクリプトで記述されたインターネット エクスプローラー HTML コンポーネント (HTC、動作) に置き換えます。 このアプローチは、スクリプトの安全な DHTML 編集コントロール (Outlook Web Access) に依存する最も有名なアプリケーションの 1 つで、正常に使用できました。

アプリケーションの DHTML 編集コントロールと TriEdit ActiveX Document オブジェクトも Windows Vista には含まれませんが、個別にダウンロードでき、配布のライセンスを取得できます。 これらは Windows Vista にインストールされた後、コントロールまたはドキュメント オブジェクトのユーザー エクスペリエンスは、以前のバージョンの Windows の場合と同じです。