C#WebBrowser脚本错误

您所在的位置:网站首页 ie11脚本发生错误 C#WebBrowser脚本错误

C#WebBrowser脚本错误

2023-07-19 10:32| 来源: 网络整理| 查看: 265

当尝试使用webBrowser.Navigate("https://home.nest.com/")加载页面时,我一直收到脚本错误。它可以从我的常规Internet浏览器上正常运行,但在我的程序中不会。

有人能指出我正确的方向吗?

相关讨论 将错误所引用的脚本发布在358行上。我们不是介意读者,如果不看代码就无法说出问题所在。 [1]:i.stack.imgur.com/ayNI2.png 您已经尝试过webBrowser.ScriptErrorsSuppressed = true;吗? 是的,该页面无法加载。 我是不断尝试和错误学习的新手,因此,如果我提出错误的问题,请不要犹豫。...Dgibbs。 @DGibbs这是Nest创建的庞大脚本。如果线条和字符没有在说谎,则发生在m.export=function(){的"导出"部分。不幸的是,我不知道问题出在哪里。许多严重依赖Javascript的网站在WebBrowser控件中都存在此问题。我唯一的建议是使用IE WebBrowser控件之外的其他控件,例如Awesomium:awesomium.com 注意:无法保证任何集成的浏览器控件都将起作用。人们不会在其中测试他们的网站。命中注定。 @imrdnck-我发布了我的信息作为答案。

作为此链接的答案:

您只能添加以下行:

1webBrowser.ScriptErrorsSuppressed = true; 相关讨论 这对我有用。我正在将vs 2017与.net Framework 4.6.1一起使用 基于SPA的网页根本无法正确呈现。 不行!"脚本错误抑制"一词表达了自己!它抑制脚本!就像您忽略了一个无法解决的问题。实际上,这有助于避免看到烦人的"错误消息"对话框。但是,它会阻止脚本运行,因此页面无法正确加载。

即使集成的Internet Explorer WebBrowser控件使用的是版本11,脚本错误始终会发生。现代网站严重依赖大量的Javascript文件和动态呈现。您可以通过在常规浏览器中观看该页面加载来看到这一点。控件有时无法削减它。

您可能想尝试一些替代的浏览器控件。无法保证它可以与其中任何一个一起使用,但是至少可以尝试一下。

Awesomium:最初基于Chromium。我不知道它们是否仍集成了Chromium更改或它们是否朝着自己的方向发展。它是免费的,供个人使用以及商业收入少于10万美元。 DotNetBrowser:将基于Chromium的WPF / WinForms组件嵌入到您的.NET应用程序中,以显示使用HTML5,CSS3,JavaScript,Silverlight等构建的现代网页。 geckofx:一个开源组件,用于在.NET应用程序中嵌入Mozilla Gecko(Firefox)。 Xilium.CefGlue:Marshall A. Greenblatt对Chromium Embedded Framework(CEF)的.NET / Mono绑定。 BrowseEmAll:BrowseEmAll.Cef(Chrome),BrowseEmAll.Gecko(Firefox),BrowseEmAll Core API(Chrome,Firefox,IE-COMMERCIAL)

可能还有其他一些,但是如果您想走这条路线,这应该为您提供一些较流行的活跃项目的开始。

相关讨论 @imrdnck不客气。不幸的是,即使使用IE11,框架浏览器也无法正常工作,但是除了真正致力于替代功能的人员外,我们无能为力。 :-)

WebBrowser控件能够呈现大多数网页,但是默认情况下,它会尝试以兼容模式呈现页面(相当多的IE7,因此是问题)。如果您要构建自己的页面,这很简单,只需将以下标签添加到标题中,它就可以很好地呈现...

1

但是,如果您要渲染第三方网站,则无法向其添加标签,事情会变得更加困难。如上所述,可以使用注册表项(HKEY_LOCAL_MACHINE \\\\\\\\ SOFTWARE \\\\\\ Wow6432Node \\\\\\\\\\ Microsoft \\\\\\\\ Internet Explorer \\\\\\\\ Main \\\\\\ FeatureControl \\\\\\\\\\ FEATURE_BROWSER_EMULATION)它只是在您自己的计算机上。

如果这两个选项都不是可行的解决方案,那么使用其他浏览器控件(同样,上面的建议很不错)几乎是您唯一的选择。

在https://docs.microsoft.com/en-gb/archive/blogs/patricka/controlling-webbrowser-control-compatibility

上有一个关于控制浏览器控件兼容模式的好博客。

您甚至可以将注册表值设置为11000,以获取IE的最新版本!

相关讨论 注册参数在哪里?

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263  private void Form1_Load(object sender, EventArgs e)   {             var appName = Process.GetCurrentProcess().ProcessName +".exe";             SetIE8KeyforWebBrowserControl(appName);             webBrowser1.ScriptErrorsSuppressed = true;   } 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();        }    } 相关讨论 如果您对代码给出一些解释,那将是很好的

您应将程序名称添加到寄存器HKEY_LOCAL_MACHINE \\\\\\\\\\ SOFTWARE \\\\\\\\ WOW6432Node \\\\\\\\\\ Microsoft \\\\\\\\ Internet Explorer \\\\\\\\ Main \\\\\\\\ FeatureControl \\\\\\\\\\ FEATURE_BROWSER_EMULATION 使用与普通Internet浏览器相同的最新功能。

对于我来说,值8000(0x1F40)-IE8模式可以解决许多脚本错误问题。

参考:

Use latest version of Internet Explorer in the webbrowser control



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3