[解決済み] ウェブブラウザコントロールで最新版のInternet Explorerを使用する
質問
C#のウェブブラウザコントロールのデフォルトバージョンは Windows フォーム アプリケーションのデフォルトは 7 ですが、記事によって 9 に変更しました。 ブラウザのエミュレーション とあるが、インストールされているInternet Explorerの最新版をWebbrowserコントロールで使用するのはどうなんだろう?
どのように解決するのですか?
私はVeerの答えを見ました。私はそれが正しいと思うが、それは私のために動作しませんでした。多分私は.NET 4を使用していて、64x OSを使用しているので、親切にこれをチェックしてください。
セットアップに入れるか、アプリケーションの起動時に確認するとよいでしょう。
private void Form1_Load(object sender, EventArgs e)
{
var appName = Process.GetCurrentProcess().ProcessName + ".exe";
SetIE8KeyforWebBrowserControl(appName);
}
private void SetIE8KeyforWebBrowserControl(string appName)
{
RegistryKey Regkey = null;
try
{
// For 64 bit machine
if (Environment.Is64BitOperatingSystem)
Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Wow6432Node\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
else //For 32 bit machine
Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
// If the path is not correct or
// if the user haven't priviledges to access the registry
if (Regkey == null)
{
MessageBox.Show("Application Settings Failed - Address Not found");
return;
}
string FindAppkey = Convert.ToString(Regkey.GetValue(appName));
// Check if key is already present
if (FindAppkey == "8000")
{
MessageBox.Show("Required Application Settings Present");
Regkey.Close();
return;
}
// If a key is not present add the key, Key value 8000 (decimal)
if (string.IsNullOrEmpty(FindAppkey))
Regkey.SetValue(appName, unchecked((int)0x1F40), RegistryValueKind.DWord);
// Check for the key after adding
FindAppkey = Convert.ToString(Regkey.GetValue(appName));
if (FindAppkey == "8000")
MessageBox.Show("Application Settings Applied Successfully");
else
MessageBox.Show("Application Settings Failed, Ref: " + FindAppkey);
}
catch (Exception ex)
{
MessageBox.Show("Application Settings Failed");
MessageBox.Show(ex.Message);
}
finally
{
// Close the Registry
if (Regkey != null)
Regkey.Close();
}
}
messagebox.showは、テスト用として見つけてもよいでしょう。
キーは以下の通りです。
<ブロッククオート-
11001 (0x2AF9) - インターネットエクスプローラー11。ウェブページがIE11のエッジモードで表示される のエッジモードに関係なく表示されます。
!DOCTYPE
ディレクティブに関係なく、IE11 のエッジモードで表示されます。 -
11000 (0x2AF8) - インターネットエクスプローラー 11。を含むウェブページは 標準ベース
!DOCTYPE
ディレクティブを含むウェブページが、IE11 のエッジモードで表示されるようになりました。 IE11のデフォルト値です。 -
10001 (0x2711) - インターネットエクスプローラー10で Web ページが IE10 標準モードで表示されます。 モードで表示されます。
!DOCTYPE
ディレクティブに関係なく、IE10 の標準モードで表示されます。 -
10000 (0x2710) - インターネット エクスプローラー 10。標準ベースの
!DOCTYPE
ディレクティブを含むウェブページは、IE10 の標準モードで表示されます。デフォルト Internet Explorer 10 の値です。 -
9999 (0x270F) - インターネットエクスプローラー9。ウェブページはIE9の 標準モードで表示されます。
!DOCTYPE
ディレクティブに関係なく、IE9 の標準モードで表示されます。 -
9000 (0x2328) - インターネットエクスプローラ 9。を含むウェブページは 標準ベース
!DOCTYPE
ディレクティブを含むウェブページは、IE9 モードで表示されます。 -
8888 (0x22B8) - IE8の標準モードでWebページが表示される。 に関係なく
!DOCTYPE
ディレクティブに関係なく、IE8 の標準モードで表示されます。 -
8000 (0x1F40) - 標準規格を含むウェブページ
!DOCTYPE
ディレクティブを含む Web ページは IE8 モードで表示されます。 -
7000 (0x1B58) - 標準規格を含むウェブページ
!DOCTYPE
ディレクティブを含む Web ページは、IE7 の標準モードで表示されます。
Skypeなどのアプリケーションで10001を使用しているのを見ました。私は知りません。
ノート
セットアップ アプリケーションは、レジストリを変更します。レジストリの変更の許可に起因するエラーを回避するために、マニフェストファイルに行を追加する必要があるかもしれません。
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
アップデイト1
このクラスは、WindowsのIEの最新バージョンを取得し、必要な変更を行うものです。
public class WebBrowserHelper
{
public static int GetEmbVersion()
{
int ieVer = GetBrowserVersion();
if (ieVer > 9)
return ieVer * 1000 + 1;
if (ieVer > 7)
return ieVer * 1111;
return 7000;
} // End Function GetEmbVersion
public static void FixBrowserVersion()
{
string appName = System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().Location);
FixBrowserVersion(appName);
}
public static void FixBrowserVersion(string appName)
{
FixBrowserVersion(appName, GetEmbVersion());
} // End Sub FixBrowserVersion
// FixBrowserVersion("<YourAppName>", 9000);
public static void FixBrowserVersion(string appName, int ieVer)
{
FixBrowserVersion_Internal("HKEY_LOCAL_MACHINE", appName + ".exe", ieVer);
FixBrowserVersion_Internal("HKEY_CURRENT_USER", appName + ".exe", ieVer);
FixBrowserVersion_Internal("HKEY_LOCAL_MACHINE", appName + ".vshost.exe", ieVer);
FixBrowserVersion_Internal("HKEY_CURRENT_USER", appName + ".vshost.exe", ieVer);
} // End Sub FixBrowserVersion
private static void FixBrowserVersion_Internal(string root, string appName, int ieVer)
{
try
{
//For 64 bit Machine
if (Environment.Is64BitOperatingSystem)
Microsoft.Win32.Registry.SetValue(root + @"\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);
else //For 32 bit Machine
Microsoft.Win32.Registry.SetValue(root + @"\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);
}
catch (Exception)
{
// some config will hit access rights exceptions
// this is why we try with both LOCAL_MACHINE and CURRENT_USER
}
} // End Sub FixBrowserVersion_Internal
public static int GetBrowserVersion()
{
// string strKeyPath = @"HKLM\SOFTWARE\Microsoft\Internet Explorer";
string strKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer";
string[] ls = new string[] { "svcVersion", "svcUpdateVersion", "Version", "W2kVersion" };
int maxVer = 0;
for (int i = 0; i < ls.Length; ++i)
{
object objVal = Microsoft.Win32.Registry.GetValue(strKeyPath, ls[i], "0");
string strVal = System.Convert.ToString(objVal);
if (strVal != null)
{
int iPos = strVal.IndexOf('.');
if (iPos > 0)
strVal = strVal.Substring(0, iPos);
int res = 0;
if (int.TryParse(strVal, out res))
maxVer = Math.Max(maxVer, res);
} // End if (strVal != null)
} // Next i
return maxVer;
} // End Function GetBrowserVersion
}
クラスの使用は以下の通りです。
WebBrowserHelper.FixBrowserVersion();
WebBrowserHelper.FixBrowserVersion("SomeAppName");
WebBrowserHelper.FixBrowserVersion("SomeAppName",intIeVer);
Windows10との比較で問題になるのは、あなたのウェブサイトが原因かもしれません。 このmetaタグを追加する必要があるかもしれません。
<meta http-equiv="X-UA-Compatible" content="IE=11" >
お楽しみに :)
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み] 配置されたアセンブリのマニフェスト定義がアセンブリ参照と一致しない
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] 特定のプロパティに対するLINQのDistinct()
-
[解決済み] .NETコンソールアプリケーションでアプリケーションのパスを取得するにはどうすればよいですか?
-
[解決済み] 数字しか入力できないテキストボックスの作り方を教えてください。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み] 2つのリストを結合する
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。