- ベストアンサー
C#のaxWebBrowserでエンコードを変更する方法
- axWebBrowserを使用してエンコードの変更を実装する方法について質問します。
- C#で開発しているインターネットブラウザにおいて、コンボボックスから選択したエンコードで表示されている文字列を再読み込みする方法を教えてください。
- 現在の処理ではhtmlを正しく読み込むことができますが、画像ファイルなどのリンクが切れてしまいます。また、2回以上エンコードを変更しようとするとエラーが発生してしまいます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
うまく回答に纏められないのでメモ殴り書き: axWebbrowserでなきゃだめなのか? System.Windows.Forms.WebBrowser はどうか?(MS謹製の.NET Frameworkは内部でaxWebbrowser利用しているらしいけど) #Windows依存であるSystem.Windows.Forms名前空間にどっぷり浸かっても良いものか?俺はたとえいくつかの実装がMicrosoft.VisualBasic名前空間をサポートしたとしてもできるだけ使わないように努力している。Mono.WebKitとかにした方が無難? #そういう信念上の話を抜きにするなら動作上は一応たしかMonoも別なコンポーネントを利用して実装しようとしていたはず。 http://www.mono-project.com/WebBrowser #何か俺の環境だとMonoのライブラリ使ってコンパイルできないんですが。 #大元の質問の答えは調べてないけれど、ここを突破できるなら ===================== http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.document.aspx http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.encoding.aspx あたりでどうにかなるはず。 以下、サンプルソース ====================== using System; namespace Q5498456A { class Q5498456A:System.Windows.Forms.Form { private System.Windows.Forms.WebBrowser webbrowser1; private System.Windows.Forms.ComboBox combobox1; Q5498456A(){ this.Width = 800; this.Height = 600; webbrowser1 = new System.Windows.Forms.WebBrowser(); webbrowser1.Top = 0; webbrowser1.Left = 0; webbrowser1.Width = this.Width; webbrowser1.Height = this.Height - 200; combobox1 = new System.Windows.Forms.ComboBox(); combobox1.Items.Add(System.Text.Encoding.GetEncoding(932).WebName); combobox1.Items.Add(System.Text.Encoding.UTF8.WebName); combobox1.Top = this.Height - 200; combobox1.Left = 0; combobox1.Width = this.Width; combobox1.SelectedIndex = 0; combobox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; combobox1.SelectedIndexChanged += combobox1_SelectedIndexChanged; this.Controls.Add(combobox1); this.Controls.Add(webbrowser1); webbrowser1.Navigate("http://localhost/OKWave/Q5498456/aaa.html"); } private void combobox1_SelectedIndexChanged(Object sender,System.EventArgs e){ /* むかつくことにこのプロパティ、System.Text.EncodingじゃなくてStringなんです */ webbrowser1.Document.Encoding = (string)(((System.Windows.Forms.ComboBox)sender).SelectedItem); webbrowser1.Refresh(); } /* つけないとコンパイラが怒る。理由はわからん */ [STAThreadAttribute] public static void Main(){ Q5498456A f1 = new Q5498456A(); f1.ShowDialog(); } } }
お礼
ご回答ありがとうございます。 ご教授いただいた方法と違うのですが、実現できましたので、 解決した方法をこの場を借りて書き込みたいと思います。 取得したhtmlを ((mshtml.HTMLDocumentClass)axWebBrowser1.Document).IHTMLDocument2_write(html); ではなく ((mshtml.HTMLDocument)axWebBrowser1.Document).body.innerHTML プロパティに代入した所期待通りの動作をさせる事ができました。 ありがとうございました。