相关疑难解决方法(0)

用更好的浏览器替换.NET WebBrowser控件,比如Chrome?

有没有相对简单的方法将现代浏览器插入.NET应用程序?

据我了解,该WebBrowser控制是一个包装IE,这不会是一个问题,但它看起来是一个很老版本的IE浏览器,以及所有在CSS螺丝起坐方面需要,潜在的安全风险(如果渲染引擎没有打补丁,我真的可以期待修复多个缓冲区溢出问题吗?)和其他问题.

我正在使用Visual Studio C#(快速版 - 它在这里有什么不同吗?)

我想在我的应用程序中集成一个好的Web浏览器.在某些情况下,我只是使用它来处理用户注册过程,与我的网站的一些功能和该订单的其他东西的接口,但我有另一个应用程序,需要更多错误...控制.

我需要:

  • 可以集成到我的应用程序窗口内的浏览器(不是单独的窗口)
  • 对CSS,js和其他Web技术的良好支持,与任何现代浏览器相同
  • 基本浏览器功能,如"导航","返回","重新加载"......
  • 自由访问页面代码和输出.

我正在考虑Chrome,因为它属于BSD许可证,但我会对最新版本的IE感到满意.

尽可能地,我想保持简单.最好的情况是,如果一个人可以修补现有的WebBrowser控制,这已经占我所需要的约70%,但我不认为这是可能的.

我找到了一个用于Mozilla的activeX控件(http://www.iol.ie/~locka/mozilla/control.htm),但看起来它是一个旧版本,所以它不一定是一个改进.

我愿意接受建议

.net c# webbrowser-control winforms

419
推荐指数
11
解决办法
41万
查看次数

如何解决.NET Webbrowser控件中的内存泄漏问题?

这是.NET Webbrowser控件中一个众所周知的旧问题.

简介:使用.NET webbrowser控件导航到页面会增加从未释放的内存使用量.

重现内存泄漏:将WebBrowser控件添加到窗体.用它来导航到你想要的任何页面.关于:空白工作,向下滚动谷歌图像,直到您的使用量为100MB +,然后在其他地方浏览,注意几乎没有任何内存被释放是一个更戏剧性的演示.

我当前对应用程序的要求包括长时间运行它,显示有限的IE7浏览器窗口.运行IE7本身也有一些混蛋设置的钩子,BHO和组策略也是不可取的,尽管这看起来像是目前的后备.将浏览器嵌入到Windows窗体应用程序中.使用不同的浏览器基础对我来说不是一个可用的选项.IE7是必需的.

与此已知内存泄漏相关的先前主题和文章:

通常提出的修复不起作用:

  • 去不同的页面并不重要.about:blank触发泄漏.它不需要页面具有javascript或任何其他额外技术.
  • 使用不同版本的Internet Explorer无关紧要.7,8和9都表现出相同的症状,据我所知,所有版本在控件中都有相同的内存泄漏.
  • Dispose()控件没有帮助.
  • 垃圾收集没有帮助.(事实上​​,我对此进行的研究表明泄漏是在Webbrowswer控件包装的非托管COM代码中.)
  • 最小化并将进程可用内存设置为-1,-1(SetProcessWorkingSetSize()或simimlar.)仅减少物理内存使用量,对虚拟内存没有影响.
  • 调用WebBrowser.Stop()不是一个解决方案,并且打破了使用静态网页之外的任何功能的功能,而不仅仅是略微减少泄漏.
  • 在导航到另一个文档之前强制等待文档完全加载也无济于事.
  • 在单独的appDomain中加载控件不能解决问题.(我自己没有这样做,但是研究显示其他人在这条路线上没有成功.)
  • 使用不同的包装器(如csexwb2)也无济于事,因为这也会遇到同样的问题.
  • 清除Internet临时文件缓存不会执行任何操作.问题出在活动内存中,而不是磁盘上.

关闭并重新启动整个应用程序时,将清除内存.

我愿意直接在COM或Windows API中编写自己的浏览器控件,如果这是对问题的肯定修复.当然,我更喜欢一个不太复杂的修复; 我宁愿避免降低级别来做事情,因为我不想在浏览器支持的功能方面重新发明轮子.让我们在自己动手的浏览器中复制IE7功能和非标准行为.

救命?

.net browser memory memory-leaks webbrowser-control

57
推荐指数
3
解决办法
2万
查看次数

WPF WebBrowser控件 - 如何抑制脚本错误?

我在这里发现了类似的问题:

使用WPF WebBrowser控件时如何禁止脚本错误?

但这些解决方案不适用于我.我需要阻止弹出窗口出现,因为我正在使用WebBrowser自动执行网站上的管理任务.

SuppressScriptErrors 似乎不是我的WebControl上的可用属性:(

.net c# wpf webbrowser-control

56
推荐指数
5
解决办法
5万
查看次数

WebBrowser控制键盘和焦点行为

显然,WPF WebBrowser控件存在一些严重的键盘和焦点问题.我整理了一个简单的WPF应用程序,只是一个WebBrowser和两个按钮.该应用程序加载一个非常基本的可编辑HTML标记(<body contentEditable='true'>some text</body>)并演示以下内容:

  • 标签是行为不端的.用户需要按两次Tab键才能在WebBrowser中查看插入符号(文本光标)并能够键入.

  • 当用户切换远离应用程序时(例如,使用Alt-Tab),然后返回,插入符号消失,她根本无法键入.需要物理鼠标单击WebBrowser的窗口客户端区域才能取回插入符号和击键.

  • 不一致的是,一个虚线的焦点矩形出现在WebBrowser周围(当标签时,但不是点击时).我找不到摆脱它的方法(FocusVisualStyle="{x:Null}"没有帮助).

  • 在内部,WebBrowser永远不会得到关注.对于逻辑焦点(FocusManager)和输入焦点(键盘)都是如此.将Keyboard.GotKeyboardFocusEventFocusManager.GotFocusEvent从不事件被解雇的web浏览器(虽然他们都对按钮做在同一个焦点范围).即使当插入符号是web浏览器内,FocusManager.GetFocusedElement(mainWindow)指向先前聚焦元件(按钮)和Keyboard.FocusedElementnull.同时,((IKeyboardInputSink)this.webBrowser).HasFocusWithin()回报true.

我会说,这样的行为几乎太功能无法实现,但这就是它的运作方式.我可能想出一些黑客来解决它并将其与原生WPF控件一起排成一行TextBox.我仍然希望,也许我在这里错过了一些模糊而简单的东西.有没有人处理过类似的问题?任何有关如何解决这个问题的建议将不胜感激.

此时,我倾向于为基于HwndHost的 WebBrowser ActiveX控件开发内部WPF包装器.我们还在考虑 WebBrowser的其他替代方案,例如Chromium Embedded Framework(CEF).

VS2012项目可以从这里下载,以防有人想玩它.

这是XAML:

<Window x:Class="WpfWebBrowserTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Width="640" Height="480" Background="LightGray">

    <StackPanel Margin="20,20,20,20">
        <ToggleButton Name="btnLoad" Focusable="True" IsTabStop="True" Content="Load" Click="btnLoad_Click" Width="100"/>

        <WebBrowser Name="webBrowser" Focusable="True" KeyboardNavigation.IsTabStop="True" FocusVisualStyle="{x:Null}" Height="300"/>

        <Button Name="btnClose" Focusable="True" IsTabStop="True" Content="Close" Click="btnClose_Click" …
Run Code Online (Sandbox Code Playgroud)

keyboard wpf focus webbrowser-control wpf-controls

28
推荐指数
2
解决办法
9886
查看次数

以编程方式控制Chrome

是否可以从C#控制和实例化Chrome浏览器?比如打开一个新窗口,更改URL,重新加载选项卡等等.

我已经找了一个C#Chrome API,但只能在https://developer.chrome.com/找到一个Javascript ,我在这里找到的最好的是C# - 如何控制Chrome浏览器 - 最好的答案是查看API.

c# google-chrome

9
推荐指数
2
解决办法
2万
查看次数

如何在WebBrowser控件上使用DrawToBitmap修复不透明度错误?

根据以下链接和我的控制台应用程序,该方法DrawToBitmap不尊重不透明度.

证明链接:http: //social.msdn.microsoft.com/Forums/vstudio/en-US/e9704309-0c52-442d-80e0-2f8393dcd313/webbrowser-opacity-problem-

我的HTML代码:http://fiddle.jshell.net/L37TC/

<div id="fader" style="background-color: #ff0000">ffff</div>
<div style="background-color: blue;  opacity:0;filter:alpha(opacity=0);">HIDDEN TEXT!</div>
SomeText 
Run Code Online (Sandbox Code Playgroud)

我的C#控制台代码:

var bmp = new  Bitmap(640,480, PixelFormat::Format32bppArgb)
var web = (System.Windows.Forms.Control)sender;
web.DrawToBitmap(bmp, Rectangle(0, 0, 640,480));
Run Code Online (Sandbox Code Playgroud)

所以我正在寻找替代的.NET内置解决方案(没有CEF,Awesomium,或任何扩展)只是.NET的内置功能来修复错误或替代解决方案,以在我的控制台中截取Web URL的屏幕截图应用.

如果我让WebBrowser窗口对我的客户端可见并且使用CopyFromScreen不透明度并且HIDDEN TEXT没有显示,那么我怎么不想让WebBrowser窗口对桌面屏幕可见.

我正在寻找一个内置的解决方案,可以在没有问题的情况下从发布的URL中截取屏幕截图HIDDEN TEXT.换句话说,是尊重opacity的解决方案.

EDIT1:我的所有像素Bitmap class(.NET类不是BMP格式)的alpha值为255.所以问题不在于文件格式.我尝试过PNG和任何其他.NET支持的格式.

完整的源代码(控制台模板,需要添加引用System.DrawingSystem.Windows.Forms

class Program
{
    static System.Windows.Forms.WebBrowser w = new System.Windows.Forms.WebBrowser();

    [STAThread]
    static void Main(string[] args) …
Run Code Online (Sandbox Code Playgroud)

.net c# vb.net webbrowser-control

8
推荐指数
1
解决办法
3568
查看次数

AOL桌面的浏览器控制台?

我参与了一个网站的开发,该网站有大量用户通过AOL桌面v9.7 for Windows 查看我们的网站- 它自己生成浏览器窗口.在调试时,我没有通常可以调用的工具(例如Chrome的开发者控制台 ; Firebug; MSIE的F12开发人员工具).

当在AOL桌面内时,我似乎没有任何这些或类似的东西.是否有我可以调用的开发者模式或控制台,发掘?

browser debugging webbrowser-control aol-desktop

7
推荐指数
1
解决办法
2574
查看次数