WPFのWebBrowserコントロールをちょっと試してみたんですが、どうもレジストリを書き換えないと初期状態はIE7のモードで描画がされるとのこと(どんな仕様なんだ・・・)。そのためデフォルトではHTML5やJavaScriptやらなんやら最近のWebはまともに表示できません。
そのためC#上でレジストリを書き換えてWebBrowserの表示モードを切り替えてみました。
検証環境
- Windows 10 Home 64bit
- .NET Framework 4.5
実装例
※レジストリの書き換えが行われるため実行は注意の上自己責任でお願いします。
<Window x:Class="Hoge.TestWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Hoge.TestWindow"
mc:Ignorable="d"
Title="TestWindow" Height="300" Width="300">
<Grid>
<WebBrowser Source="..."></WebBrowser>
</Grid>
</Window>
public static void createRegistry()
{
var filename = Process.GetCurrentProcess().MainModule.FileName;
filename = filename.Substring(filename.LastIndexOf('\\') + 1,
filename.Length - filename.LastIndexOf('\\') - 1);
if (filename.Contains("vhost"))
filename = filename.Substring(0, filename.IndexOf('.') + 1) + "exe";
Debug.Assert(Registry.CurrentUser != null, "Registry.CurrentUser != null");
RegistryKey key1 = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION");
RegistryKey key2 = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BEHAVIORS");
key1?.SetValue(filename, 11001, RegistryValueKind.DWord);
key2?.SetValue(filename, 11001, RegistryValueKind.DWord);
key1?.Close();
key2?.Close();
}
これで自分の環境ではIE11のモードで実行ができるようになりました。
コードは以下の記事のものを参考にしていますが、そのままだと権限関連で実行できないので Registry.CurrentUser
に一部変更しています。
WebBrowser c# object : set google chrome as default browser - Stack Overflow
参考
WebBrowser c# object : set google chrome as default browser - Stack Overflow
WebBrowser コントロールのInternet Explorerを最新のバージョンに変更する - C#プログラミング