3

現在のプロジェクトで Web ブラウザーを使用しており、現在、編集可能にするためにデザイン モードで使用しています。現在使用しているコードは次のとおりです。

WebBrowser.Document.DomDocument as IHTMLDocument2

IHTMLDocument2、3、または 4 とは実際には何ですか? また、ドキュメント内の現在の選択範囲を識別するときに、range.text.replace メソッドが string.replace と同じように機能しないこともわかりました。

IHTMLDocuments と IHTMLTxtRange の基本的な機能を説明してくれる人はいますか?

4

1 に答える 1

2

IHTMLDocument は、それを実装するオブジェクトが提供するものを表す、本質的に「壊れない」コントラクトであるインターフェイスです。

新しいバージョンのコードに移行するときにインターフェイスを変更すると、そのコントラクトが壊れ、そのコントラクトに依存しているコードが壊れます。

を作成するとします:

public interface IMyInterface {
      public int Property1 { get;  set; }
}

1 年後、Property2 を追加する必要がありますが、インターフェイスを変更することはできません。したがって、それを回避する1つの方法は、次を作成することです。

public interface IMyInterface2 {
    public int Property2 { get;set; }
} 

そして、 IMyInterface を実装している古いクラスで:

public class MyObject : IMyInterface, IMyInterface2 {
    public int Property1 { get {} set {} }
    public int Property2 { get {} set {} }
}

そうすれば、古いコントラクトを破ることはありませんが、次のようなコードで新しいインターフェイスを使用できます。

if (obj is IMyInterface) {
   Console.WriteLine(((IMyInterface)obj).Property1);

   if (obj is IMyInterface2) {
      //more
   }
}

それがマイクロソフトがしたことです。IHTMLDocument が含まれている mshtml ライブラリは COM ライブラリであり、COM はインターフェイスに大きく依存しています。そのため、ライブラリが進化するにつれて、Microsoft はより多くのインターフェイスを追加して、新しい機能/コードを公開しました。

IHTMLTxtRange は、より一般的に使用されるTextRangeオブジェクトのインターフェイスです。テキスト「フラグメント」または「範囲」を解析するための一連の機能を公開します。

http://www.webreference.com/js/column12/trmethods.html

于 2009-05-08T09:33:55.993 に答える