“JSON”未定义。

3
我试图将Chromecast背景网站加载到c#的WebBrowser中,但出现以下错误: enter image description here 我认为这是因为webbrowser默认使用IE7(?),可能与网站中的JS不兼容。我尝试更新注册表FEATURE_BROWSER_EMULATION到9000,希望强制webbrowser使用IE9框架。但我仍然遇到相同的错误。
这个任务是否太基础了,或者有没有解决这个问题的方法?
编辑:
当我打印webbrowser.version时,我得到:版本:11.0.9600.16518。这是我当前拥有的IE版本。如果我打开IE11并导航到URL,它可以正常工作。不确定为什么webbroswer会有问题。
我尝试使用此代码向网页注入JSON解析器
HtmlDocument doc = webBrowser1.Document;
            Console.WriteLine(doc);
            HtmlElement head = doc.GetElementsByTagName("head")[0];
            HtmlElement s = doc.CreateElement("script");
            s.SetAttribute("type", "text/javascript");
            s.SetAttribute("src", "http://192.168.1.23:10000/JSON-js-master/json2.js");
            head.AppendChild(s);

我尝试使用本地和外部IP引用主机文件,但似乎没有什么区别。


哇,是的,我会说IE7太老了!你能用一个不同的浏览器吗? - Mike Schwartz
更新注册表时,你是否包含了正确的进程名称?http://msdn.microsoft.com/zh-cn/library/ee330730.aspx#browser_emulation - Brad Rem
WebBrowser控件就是IE。它始终运行在你电脑上的同一版本IE。升级IE,你也会升级控件。同时,尝试直接使用浏览器访问该网站,看看会发生什么。 - John Saunders
@JohnSaunders,我刚刚运行了一个WebBrowser控件,导航到Nick在他的问题中链接的页面,我得到了与他相同的结果。在IE中点击链接是成功的。有趣的是,将IE设置为兼容模式会导致WebBrowser生成非常类似的问题。 - Brad Rem
1
@Nick,因为我安装了IE 11,所以我将浏览器仿真设置为11001,这样就可以正常工作了。 - Brad Rem
显示剩余7条评论
1个回答

7
显然,当WebBrowser控件运行时,它在计算机上安装的IE版本中运行,但以IE7兼容模式运行。尝试加载您列出的链接需要更现代的浏览器。事实上,您请求的页面需要IE10或更高版本。
您确实需要更改注册表中的浏览器仿真设置,以便WebBrowser控件使用更现代的IE功能集:
{{link1:Internet Feature Controls}}
正如您在问题中已经提到的那样,需要调整的注册表中的两个区域是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
在这两个位置中,您应用程序的进程名称都包含一个DWORD值,指示兼容性级别。具体值可以在Internet Feature Controls帮助页面上找到。文件名是您应用程序的名称"MyApplication1.exe",如果您是从Visual Studio中运行,则为"MyApplication1.vshost.exe"。
因为我已经安装了IE 11,所以我将浏览器仿真设置为11001,并且它适用于您链接的网页。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接