C#Webbrowser Controls
問題: c#wpfアプリケーション(.net 4)を使用すると、完全なインターネットエクスプローラー(すなわち)ブラウザーと比較して、ajaxコールの不一致が発生する可能性があります。 これは、完了せずに永続的な「リクエストが処理されている」メッセージとしてしばしば現れます。
WebBrowser
コントロールのレンダリングエンジンは、常にIEの動作を完全に反映するとは限りません。 この互換性は、JavaScriptとAjax機能に影響を与える可能性があります
WebBrowser
ソリューション:レジストリ操作を介した機能コントロール
これを解決するための鍵は、機能コントロールを使用してコントロールのエミュレーションモードを調整することです。 これには、レジストリ設定を変更して、特定のIEバージョンとコントロールの動作をより密接に合わせることが含まれます。 次のコードは、現在のユーザーのレジストリをターゲットにすることにより、管理者の特権を要求することを避けています。
コードの例:WebBrowser
レジストリキーを設定します。 また、インストールされているIEバージョンに基づいて適切なエミュレーションモードを取得する関数を示しています。 必要なステートメントを追加することを忘れないでください。
重要な考慮事項:FEATURE_BROWSER_EMULATION
using
Microsoft.Win32
System
<code class="language-csharp">private void SetBrowserFeatureControlKey(string feature, string appName, uint value) { using (var key = Registry.CurrentUser.CreateSubKey( $@"Software\Microsoft\Internet Explorer\Main\FeatureControl\{feature}", RegistryKeyPermissionCheck.ReadWriteSubTree)) { key.SetValue(appName, (uint)value, RegistryValueKind.DWord); } } private uint GetBrowserEmulationMode() { uint mode = 11000; // Default to IE11 emulation try { using (var ieKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer")) { var version = ieKey?.GetValue("svcVersion") ?? ieKey?.GetValue("Version"); if (version != null) { if (int.TryParse(version.ToString().Split('.')[0], out int browserVersion)) { switch (browserVersion) { case 7: mode = 7000; break; case 8: mode = 8000; break; case 9: mode = 9000; break; case 10: mode = 10000; break; } } } } } catch { /* Ignore registry access errors */ } return mode; } private void SetBrowserFeatureControl() { uint mode = GetBrowserEmulationMode(); SetBrowserFeatureControlKey("FEATURE_BROWSER_EMULATION", Application.ProductName, mode); } // Call SetBrowserFeatureControl() before initializing the WebBrowser control. For example: public MainWindow() { SetBrowserFeatureControl(); InitializeComponent(); }</code>
関数には、潜在的なレジストリアクセスの問題を優雅に管理するための基本的なエラー処理が含まれています。 アプリケーション名:
GetBrowserEmulationMode
は重要ですが、遭遇する特定のAJAXの問題に応じて、他の機能コントロールが必要になる場合があります。 包括的なリストについては、Microsoftのドキュメントに相談してください
以上がC#Webbrowser ControlのAjax呼び出しがインターネットエクスプローラーと異なるのはなぜですか?どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。