Masalah: Aplikasi C# WPF anda (.NET 4) Menggunakan kawalan mungkin mengalami percanggahan panggilan AJAX berbanding dengan penyemak imbas Internet Explorer (IE) penuh. Ini sering ditunjukkan sebagai mesej "permintaan anda sedang diproses" tanpa siap. WebBrowser
punca akar: enjin rendering kawalan tidak selalu sempurna mencerminkan tingkah laku IE. Ketidakpastian ini boleh menjejaskan fungsi JavaScript dan Ajax. WebBrowser
Penyelesaian: Kawalan ciri melalui manipulasi pendaftaran
Kunci untuk menyelesaikan ini adalah menyesuaikan mod emulasi kawalan menggunakan kawalan ciri. Ini melibatkan mengubah suai tetapan pendaftaran untuk menyelaraskan tingkah laku kawalan dengan lebih rapat dengan versi IE tertentu. Kod berikut mengelakkan yang memerlukan keistimewaan pentadbir dengan mensasarkan pendaftaran pengguna semasa. WebBrowser
Contoh kod:
Coretan kod ini menetapkan kunci pendaftaran untuk memadankan versi IE yang dikesan. Ia juga menunjukkan fungsi untuk mendapatkan mod emulasi yang sesuai berdasarkan versi IE yang dipasang. Ingatlah untuk menambah pernyataan yang diperlukan untuk FEATURE_BROWSER_EMULATION
dan 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
Nama Aplikasi: Application.ProductName
adalah penting, kawalan ciri lain mungkin diperlukan bergantung pada isu -isu Ajax tertentu yang dihadapi. Rujuk dokumentasi Microsoft untuk senarai komprehensif. FEATURE_BROWSER_EMULATION
Atas ialah kandungan terperinci Mengapa panggilan Ajax kawalan C# Webbrowser saya berbeza dari Internet Explorer, dan bagaimana saya boleh memperbaikinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!