WebBrowser控件与IE的效果不一致啊。。。怎么办?

时间:2022-04-13 10:12:36
VS2010 .NET4.0 C# WinForm WebBrowser

用VS控件WebBrowser浏览某些网页,其效果与直接用IE有较大差别,例如 http://dl.dbank.com/c0wtze2ttu。
IE里,点击‘转存网盘’按钮,会弹出一个对话框。
在WebBrowser里,却没有任何反应或动作。

WebBrowser是直接拖到WinForm里的,没有做任何设置的改动。

WebBrowser调用的应该是IE底层,但为什么效果不一致呢?
请问如何处理,使WebBrowser能与IE的行为一致?

很多人上来就回复说一致啊。。。请亲自试验一下。

24 个解决方案

#1


据我的理解,WebBrowser是对IE的功能做了大量精简,所以肯定不会完全一致。

#2


WebBrowser可能跟ie并不一致,楼主试着修改下设置 再试下

#3


内核问题。内核问题。

#4


引用 1 楼 lyq8376 的回复:
据我的理解,WebBrowser是对IE的功能做了大量精简,所以肯定不会完全一致。


有什么实际的解决方法?

#5


您好,我刚用2.0的环境测试了下,没有任何设置,发现除了弹出几个脚本错误外,弹出框还是正常显示,你是不是设置了什么,禁用了弹出框?

#6


引用 5 楼 happySnow_zhe 的回复:
您好,我刚用2.0的环境测试了下,没有任何设置,发现除了弹出几个脚本错误外,弹出框还是正常显示,你是不是设置了什么,禁用了弹出框?


我刚用2.0试了一下,与4.0问题一致,还是不能弹出对话框。

编程上,一个WinForm上直接拖拽一个WebBrowser和一个Button,点击按钮执行以下操作:
        private void button1_Click(object sender, EventArgs e)
        {

            webBrowser1.Navigate("http://pan.baidu.com/share/link?shareid=94975&uk=673798325");
            //webBrowser1.Navigate("http://dl.dbank.com/c0wtze2ttu");
        }
没有其他任何代码,也没有任何对WebBrowser的设置。

#7


引用 5 楼 happySnow_zhe 的回复:
您好,我刚用2.0的环境测试了下,没有任何设置,发现除了弹出几个脚本错误外,弹出框还是正常显示,你是不是设置了什么,禁用了弹出框?


试试这个网址:
http://pan.baidu.com/share/link?shareid=94975&uk=673798325

#8


进一步的结论是:
WebBrowser执行js脚本会出错,但IE不会出错。

#9


不一致很正常。。

#10


呵呵呵。。。。
WebBrowser仅仅是个控件而已。
IE是个产品,产品啊,你明白么,产品!!!!!。
两者怎可同日而语呢?

#11


你换一下火狐看一下,他应该比ie好。

#12


引用 10 楼 victo7 的回复:
呵呵呵。。。。
WebBrowser仅仅是个控件而已。
IE是个产品,产品啊,你明白么,产品!!!!!。
两者怎可同日而语呢?


是应该会有不同,但应该是上层功能的多少而已,基本的浏览还是要支持的啊。
如果WebBrowser就是这样,那大多数做类似开发的人就哭憋了,不得不寻找其他途径?

WebBrowser其实应该是对IE底层COM的再包装,浏览行为应该一致啊。
出现这种问题让人哀叹。不知道有没有解决办法。

#13


引用 11 楼 sadasasdasd 的回复:
你换一下火狐看一下,他应该比ie好。


其他浏览器暂不在考虑范围,是因为没接触过,一点不会。

#14


webbrowser 的工作机制非常奇怪

如果你本机安装的是 ie6,则 webbrowser 也使用 ie6 的内核
否则。。。。。。。。。。。 webbrowser 使用 ie7 的内核

所以,很可能是因为你本机安装的 ie9,但是 webbrowser还是使用 ie7 的原因

#15


引用 13 楼 bebeing 的回复:
引用 11 楼 sadasasdasd 的回复:你换一下火狐看一下,他应该比ie好。

其他浏览器暂不在考虑范围,是因为没接触过,一点不会。



我是说你用火狐的打开看一下,他是不是跟你想要的效果是一样的。

#16


装的IE9吧?

我以前遇到过。

系统的其他应用程序默认以IE7方式渲染。

可以通过修改注册表方式,设置自己的应用程序的IE渲染(版本)方式。

参考: http://www.cnblogs.com/liuzhendong/archive/2012/03/21/2410107.html

#17


引用 14 楼 huwei001982 的回复:
webbrowser 的工作机制非常奇怪

如果你本机安装的是 ie6,则 webbrowser 也使用 ie6 的内核
否则。。。。。。。。。。。 webbrowser 使用 ie7 的内核

所以,很可能是因为你本机安装的 ie9,但是 webbrowser还是使用 ie7 的原因


本机装的是IE8.
WebBrowser默认的行为是IE7兼容模式,即使本机装了IE8. 试过某种强制WebBrowser使用IE8的方式,但没有效果。

#18


引用 16 楼 slowhand 的回复:
装的IE9吧?

我以前遇到过。

系统的其他应用程序默认以IE7方式渲染。

可以通过修改注册表方式,设置自己的应用程序的IE渲染(版本)方式。

参考:http://www.cnblogs.com/liuzhendong/archive/2012/03/21/2410107.html


我本机装的是IE8 32位版本。
试着写了个函数,也成功在注册表中设置,但还是没有作用啊。请看看代码哪里出了问题?

        private void RegWebBrowserIn32BitIE8Mode()
        {
            RegistryKey key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION");
            key.SetValue(Path.GetFileName(Application.ExecutablePath), 8000, RegistryValueKind.DWord);
            key.Close();
        }

#19


UP!!!!!!

#20


设置的数值也是有关系的。

比如IE9
设置为9999,则所有页面都会以IE9渲染。
设置为9000,只有页面头部有 <!DOCTYPE  directives 这样标记的才会使用IE9渲染;其他的页面还是默认方式。

#21


顶啊  我也是,用IE打开JS调用一切正常,在WEBBROWSER里打开就一片,还会提示JS错误

#22


引用 楼主 bebeing 的回复:
VS2010 .NET4.0 C# WinForm WebBrowser

用VS控件WebBrowser浏览某些网页,其效果与直接用IE有较大差别,例如 http://dl.dbank.com/c0wtze2ttu。
IE里,点击‘转存网盘’按钮,会弹出一个对话框。
在WebBrowser里,却没有任何反应或动作。

WebBrowser是直接拖到WinForm里的,没有做任何设置的改动。

WebBrowser调用的应该是IE底层,但为什么效果不一致呢?
请问如何处理,使WebBrowser能与IE的行为一致?

很多人上来就回复说一致啊。。。请亲自试验一下。


----------------------

按照你说的试了下 无任何问题,弹出框也出来了、

#23


  另 JS错误是很正常的了,webbrowser是控件半成品,所以不奇怪。

  IE是成品,封装了包括webbrowser在内的多层架构控件和DLL。

#24


建议逆一下360se3,你会看到一大堆注册表相关设置,直接抄过来吧

#1


据我的理解,WebBrowser是对IE的功能做了大量精简,所以肯定不会完全一致。

#2


WebBrowser可能跟ie并不一致,楼主试着修改下设置 再试下

#3


内核问题。内核问题。

#4


引用 1 楼 lyq8376 的回复:
据我的理解,WebBrowser是对IE的功能做了大量精简,所以肯定不会完全一致。


有什么实际的解决方法?

#5


您好,我刚用2.0的环境测试了下,没有任何设置,发现除了弹出几个脚本错误外,弹出框还是正常显示,你是不是设置了什么,禁用了弹出框?

#6


引用 5 楼 happySnow_zhe 的回复:
您好,我刚用2.0的环境测试了下,没有任何设置,发现除了弹出几个脚本错误外,弹出框还是正常显示,你是不是设置了什么,禁用了弹出框?


我刚用2.0试了一下,与4.0问题一致,还是不能弹出对话框。

编程上,一个WinForm上直接拖拽一个WebBrowser和一个Button,点击按钮执行以下操作:
        private void button1_Click(object sender, EventArgs e)
        {

            webBrowser1.Navigate("http://pan.baidu.com/share/link?shareid=94975&uk=673798325");
            //webBrowser1.Navigate("http://dl.dbank.com/c0wtze2ttu");
        }
没有其他任何代码,也没有任何对WebBrowser的设置。

#7


引用 5 楼 happySnow_zhe 的回复:
您好,我刚用2.0的环境测试了下,没有任何设置,发现除了弹出几个脚本错误外,弹出框还是正常显示,你是不是设置了什么,禁用了弹出框?


试试这个网址:
http://pan.baidu.com/share/link?shareid=94975&uk=673798325

#8


进一步的结论是:
WebBrowser执行js脚本会出错,但IE不会出错。

#9


不一致很正常。。

#10


呵呵呵。。。。
WebBrowser仅仅是个控件而已。
IE是个产品,产品啊,你明白么,产品!!!!!。
两者怎可同日而语呢?

#11


你换一下火狐看一下,他应该比ie好。

#12


引用 10 楼 victo7 的回复:
呵呵呵。。。。
WebBrowser仅仅是个控件而已。
IE是个产品,产品啊,你明白么,产品!!!!!。
两者怎可同日而语呢?


是应该会有不同,但应该是上层功能的多少而已,基本的浏览还是要支持的啊。
如果WebBrowser就是这样,那大多数做类似开发的人就哭憋了,不得不寻找其他途径?

WebBrowser其实应该是对IE底层COM的再包装,浏览行为应该一致啊。
出现这种问题让人哀叹。不知道有没有解决办法。

#13


引用 11 楼 sadasasdasd 的回复:
你换一下火狐看一下,他应该比ie好。


其他浏览器暂不在考虑范围,是因为没接触过,一点不会。

#14


webbrowser 的工作机制非常奇怪

如果你本机安装的是 ie6,则 webbrowser 也使用 ie6 的内核
否则。。。。。。。。。。。 webbrowser 使用 ie7 的内核

所以,很可能是因为你本机安装的 ie9,但是 webbrowser还是使用 ie7 的原因

#15


引用 13 楼 bebeing 的回复:
引用 11 楼 sadasasdasd 的回复:你换一下火狐看一下,他应该比ie好。

其他浏览器暂不在考虑范围,是因为没接触过,一点不会。



我是说你用火狐的打开看一下,他是不是跟你想要的效果是一样的。

#16


装的IE9吧?

我以前遇到过。

系统的其他应用程序默认以IE7方式渲染。

可以通过修改注册表方式,设置自己的应用程序的IE渲染(版本)方式。

参考: http://www.cnblogs.com/liuzhendong/archive/2012/03/21/2410107.html

#17


引用 14 楼 huwei001982 的回复:
webbrowser 的工作机制非常奇怪

如果你本机安装的是 ie6,则 webbrowser 也使用 ie6 的内核
否则。。。。。。。。。。。 webbrowser 使用 ie7 的内核

所以,很可能是因为你本机安装的 ie9,但是 webbrowser还是使用 ie7 的原因


本机装的是IE8.
WebBrowser默认的行为是IE7兼容模式,即使本机装了IE8. 试过某种强制WebBrowser使用IE8的方式,但没有效果。

#18


引用 16 楼 slowhand 的回复:
装的IE9吧?

我以前遇到过。

系统的其他应用程序默认以IE7方式渲染。

可以通过修改注册表方式,设置自己的应用程序的IE渲染(版本)方式。

参考:http://www.cnblogs.com/liuzhendong/archive/2012/03/21/2410107.html


我本机装的是IE8 32位版本。
试着写了个函数,也成功在注册表中设置,但还是没有作用啊。请看看代码哪里出了问题?

        private void RegWebBrowserIn32BitIE8Mode()
        {
            RegistryKey key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION");
            key.SetValue(Path.GetFileName(Application.ExecutablePath), 8000, RegistryValueKind.DWord);
            key.Close();
        }

#19


UP!!!!!!

#20


设置的数值也是有关系的。

比如IE9
设置为9999,则所有页面都会以IE9渲染。
设置为9000,只有页面头部有 <!DOCTYPE  directives 这样标记的才会使用IE9渲染;其他的页面还是默认方式。

#21


顶啊  我也是,用IE打开JS调用一切正常,在WEBBROWSER里打开就一片,还会提示JS错误

#22


引用 楼主 bebeing 的回复:
VS2010 .NET4.0 C# WinForm WebBrowser

用VS控件WebBrowser浏览某些网页,其效果与直接用IE有较大差别,例如 http://dl.dbank.com/c0wtze2ttu。
IE里,点击‘转存网盘’按钮,会弹出一个对话框。
在WebBrowser里,却没有任何反应或动作。

WebBrowser是直接拖到WinForm里的,没有做任何设置的改动。

WebBrowser调用的应该是IE底层,但为什么效果不一致呢?
请问如何处理,使WebBrowser能与IE的行为一致?

很多人上来就回复说一致啊。。。请亲自试验一下。


----------------------

按照你说的试了下 无任何问题,弹出框也出来了、

#23


  另 JS错误是很正常的了,webbrowser是控件半成品,所以不奇怪。

  IE是成品,封装了包括webbrowser在内的多层架构控件和DLL。

#24


建议逆一下360se3,你会看到一大堆注册表相关设置,直接抄过来吧