Internet Explorerへのデータの読み込み方法色々

IE(本体またはブラウズコンポーネント)にHTMLデータを表示させたい。そのための方法いろいろ。タブブラウザを作るとか、特に2chブラウザを作るとかするときに必要になりがち

IWebBrowser2::Navigate2()を使う
  • 開くためにURLが必要。URLを持たないメモリー上のデータには使えない
    • 新規にスキームと、そのハンドラを登録してしまえばなんとかなることはなる。
    • ハンドラの登録はどうやる? それっぽいレジストリキーはあるけれど、モニカともちょっと違う感じ。資料どこ?
    • セキュリティホールを作ってるだけかも。
    • 労多くして、危うく、実り少なし
  • 拡張子チェックが働くのでContent-Type判別に失敗する可能性が低い
  • URLに応じてセキュリティチェックが機能する。これは目的に依って一長一短。ScriptやActiveX付きデータを流し込むときは不便。
documentオブジェクトをIPersistStreamで初期化
  • CreateStreamOnHGlobal()を使えばメモリー上からも文書を読み込める。datファイルからHTMLを作るときとかに便利
  • HTTPヘッダも拡張子も無いので、IEの勝手な判断でソースが表示されてしまうケースがあった。
  • ファイルから読むにはSHCreateStreamOnFileを使用
  • CAxStreamOnXXX系クラスが使える?
documentオブジェクトをIPersistMonikerで初期化
IHTMLDocument2::write()
IEが持っているオブジェクト参照を一端解放してから再レンダリングする模様。文書内のスクリプトとユーザーコードとのやりとりにwindow.externalプロパティを使っている場合、タイミングによってはwindow.externalがnull。http://www.csharphelp.com/board2/read.html?f=1&i=32994&t=32994&v=f参照。
document.getElementByTagname("html").outerHTMLを設定
HTML要素のouterHTMLプロパティはread-onlyなのでダメ。インターフェース定義にはput_outerHTMLはあるけれど、ダメ。