C#webBrowser脚本错误

时间:2016-05-20 15:54:15

标签: c# webbrowser-control

尝试使用webBrowser.Navigate("https://home.nest.com/")加载页面时,我一直收到脚本错误。它会从我的普通互联网浏览器中恢复正常,但不会在我的程序中。

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

Script Error

6 个答案:

答案 0 :(得分:4)

即使使用版本11,脚本错误也始终在集成的Internet Explorer WebBrowser控件中发生。现代网站严重依赖于大量的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 - 商业)

可能还有其他人,但如果您想要追求这条路线,这应该会为您提供一些更受欢迎的活跃项目。

答案 1 :(得分:3)

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

<meta http-equiv="X-UA-Compatible" content="IE=Edge" />

但是,如果您要渲染第三方站点,则无法添加标签,事情会变得更加困难。如上所述,如果您只在自己的计算机上,则可以使用注册表项(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

上有一个很棒的博客,介绍了如何控制浏览器控件兼容模式。

答案 2 :(得分:0)

您应将程序名称添加到寄存器 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

答案 3 :(得分:0)

作为this link的答案:

您只需添加以下行:

webBrowser.ScriptErrorsSuppressed = true;

答案 4 :(得分:0)

  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();
       }
   }

答案 5 :(得分:0)

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