尝试使用webBrowser.Navigate("https://home.nest.com/")
加载页面时,我一直收到脚本错误。它会从我的普通互联网浏览器中恢复正常,但不会在我的程序中。
有人能指出我正确的方向吗?
答案 0 :(得分:4)
即使使用版本11,脚本错误也始终在集成的Internet Explorer WebBrowser
控件中发生。现代网站严重依赖于大量的Javascript文件和动态呈现。您可以通过在常规浏览器中观看该页面加载来查看。控件无法在某些时候削减它。
您可能想尝试一些其他浏览器控件。不能保证它可以与它们中的任何一个一起使用,但至少它是值得尝试的。
可能还有其他人,但如果您想要追求这条路线,这应该会为您提供一些更受欢迎的活跃项目。
答案 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)
答案 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的最新版本!