WebBrowser控件和JavaScript错误

时间:2011-04-03 12:37:51

标签: c# javascript .net winforms webbrowser-control

当我使用浏览器(ie9)访问该页面时,浏览器呈现正常。

当我使用WebBrowser控件时,我遇到了JavaScript错误。

我知道我可以抑制脚本错误,但我希望它们能够正确运行,因为它们会影响页面的渲染和功能。

我该如何解决这个问题?我可以直接在Windows窗体中集成IE9并使用类似于WebBrowser控件的方法(导航,获取ID,调用点击)吗?

感谢。

6 个答案:

答案 0 :(得分:14)

我要做的是将一个对象分配给webbrowser.ObjectForScripting,然后注入一个javascript函数,将windown.onerror分配给一个调用主机应用程序中的外部脚本的包装器。喜欢:

window.onerror = function(message, url, lineNumber) 
{ 
  window.external.errorHandler(message, url, lineNumber);
}

参考: http://notions.okuda.ca/2009/06/11/calling-javascript-in-a-webbrowser-control-from-c/

答案 1 :(得分:9)

您可以使用以下代码行来消除这些类型的错误:

webBrowser1.ScriptErrorsSuppressed = true;

它可以防止出现JavaScript错误。

答案 2 :(得分:8)

如果安装了IE9,WebBrowser仍将使用IE7模式,除非您使用注册表设置覆盖此行为 - 如此StackOverflow answer中所述。这是您在WebBrowser中遇到的JavaScript错误的最可能原因(因为您在IE9中没有看到相同的错误)。

您可以使用以下c#代码进行注册表设置(如果检测到Windows 8,则设置IE10模式)并更改 app-name.exe 以匹配您自己的应用程序。您应该为没有足够权限的情况添加错误处理程序(写入此注册表项需要管理员权限)。

string installkey = @"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
string entryLabel = "app-name.exe";
System.OperatingSystem osInfo = System.Environment.OSVersion;

string version = osInfo.Version.Major.ToString() + '.' + osInfo.Version.Minor.ToString();
uint editFlag = (uint)((version == "6.2") ? 0x2710 : 0x2328); // 6.2 = Windows 8 and therefore IE10

RegistryKey existingSubKey = Registry.LocalMachine.OpenSubKey(installkey, false); // readonly key

if (existingSubKey.GetValue(entryLabel) == null)
{
     existingSubKey = Registry.LocalMachine.OpenSubKey(installkey, true); // writable key
     existingSubKey.SetValue(entryLabel, unchecked((int)editFlag), RegistryValueKind.DWord);
}

答案 3 :(得分:7)

所以我知道这个帖子已经过时了,但这对我来说是一个最近的问题,我不得不在盒子外面进行一些认真的挖掘和思考。

基本上就像这里的大多数回复一样 - 你不能改变webbrowser控件来使用最新的IE引擎。我默认使用IE7,我看到一些回复基本上改变/添加到注册表的东西,在注册表时总是不舒服,解决这个问题的一个更简洁的方法是在你的网站上附加强制它的代码在任何电脑上使用最新的IE引擎,就像魅力一样。

如果您有权访问要浏览的页面的web.config文件,可以简单地附加:

    <system.webServer>
<httpProtocol>
    <customHeaders>
        <clear />
        <add name="X-UA-Compatible" value="IE=edge" />
    </customHeaders>
</httpProtocol>
</system.webServer>

并且您的网站会强制webbrowser控件在您的计算机上运行最新的IE引擎。其他选项可在此处找到:

https://www.leapinggorilla.com/Blog/Read/1016/ie-ate-my-css---disabling-compatability-mode

我应该声明,只有当您有权访问您尝试访问的网站/应用程序的page / web.config时,这才有效。

答案 4 :(得分:4)

WebBrowser控件使用IE7。因此,如果出现问题,那么您的脚本不适用于IE7,您将不得不修复它。

您无法集成IE9,因为它取决于它是否安装在计算机上而且并非每个人都安装了IE9。

答案 5 :(得分:2)

作为对其他任何人可能遇到此问题的帮助,我尝试了所有这些事情,但对我来说没有任何作用。这有什么作用。我不确定完全是什么导致了这个错误,但显然当你按下&#34; F5&#34;在VS中调试您的应用程序,它运行YourProject.vshost.exe作为进程名称。如果从命令行运行相同的应用程序,它将显示为YourProject.exe,并且javascript错误消失。我认为IE看到应用程序通过VSHOST运行签证,并确定这是可疑的并禁用正确加载的JavaScript。

所以...进入你的可执行文件的项目设置。 选择&#34; Debug&#34;选项。 选择&#34;启动外部程序&#34;。 浏览并选择Debug \ YourProgram.exe(NOT YourProgram.vshost.exe)。 保存,重新编译,然后点击F5。

现在一切都应该按照惯例工作,Visual Studio甚至会自动为您处理这个过程。

享受!

Grego