有没有相对简单的方法将现代浏览器插入.NET应用程序?
据我了解,该WebBrowser控制是一个包装IE,这不会是一个问题,但它看起来是一个很老版本的IE浏览器,以及所有在CSS螺丝起坐方面需要,潜在的安全风险(如果渲染引擎没有打补丁,我真的可以期待修复多个缓冲区溢出问题吗?)和其他问题.
我正在使用Visual Studio C#(快速版 - 它在这里有什么不同吗?)
我想在我的应用程序中集成一个好的Web浏览器.在某些情况下,我只是使用它来处理用户注册过程,与我的网站的一些功能和该订单的其他东西的接口,但我有另一个应用程序,需要更多错误...控制.
我需要:
我正在考虑Chrome,因为它属于BSD许可证,但我会对最新版本的IE感到满意.
尽可能地,我想保持简单.最好的情况是,如果一个人可以修补现有的WebBrowser控制,这已经占我所需要的约70%,但我不认为这是可能的.
我找到了一个用于Mozilla的activeX控件(http://www.iol.ie/~locka/mozilla/control.htm),但看起来它是一个旧版本,所以它不一定是一个改进.
我愿意接受建议
这是.NET Webbrowser控件中一个众所周知的旧问题.
简介:使用.NET webbrowser控件导航到页面会增加从未释放的内存使用量.
重现内存泄漏:将WebBrowser控件添加到窗体.用它来导航到你想要的任何页面.关于:空白工作,向下滚动谷歌图像,直到您的使用量为100MB +,然后在其他地方浏览,注意几乎没有任何内存被释放是一个更戏剧性的演示.
我当前对应用程序的要求包括长时间运行它,显示有限的IE7浏览器窗口.运行IE7本身也有一些混蛋设置的钩子,BHO和组策略也是不可取的,尽管这看起来像是目前的后备.将浏览器嵌入到Windows窗体应用程序中.使用不同的浏览器基础对我来说不是一个可用的选项.IE7是必需的.
与此已知内存泄漏相关的先前主题和文章:
通常提出的修复不起作用:
关闭并重新启动整个应用程序时,将清除内存.
我愿意直接在COM或Windows API中编写自己的浏览器控件,如果这是对问题的肯定修复.当然,我更喜欢一个不太复杂的修复; 我宁愿避免降低级别来做事情,因为我不想在浏览器支持的功能方面重新发明轮子.让我们在自己动手的浏览器中复制IE7功能和非标准行为.
救命?
我在这里发现了类似的问题:
但这些解决方案不适用于我.我需要阻止弹出窗口出现,因为我正在使用WebBrowser自动执行网站上的管理任务.
SuppressScriptErrors 似乎不是我的WebControl上的可用属性:(
显然,WPF WebBrowser控件存在一些严重的键盘和焦点问题.我整理了一个简单的WPF应用程序,只是一个WebBrowser和两个按钮.该应用程序加载一个非常基本的可编辑HTML标记(<body contentEditable='true'>some text</body>)并演示以下内容:
标签是行为不端的.用户需要按两次Tab键才能在WebBrowser中查看插入符号(文本光标)并能够键入.
当用户切换远离应用程序时(例如,使用Alt-Tab),然后返回,插入符号消失,她根本无法键入.需要物理鼠标单击WebBrowser的窗口客户端区域才能取回插入符号和击键.
不一致的是,一个虚线的焦点矩形出现在WebBrowser周围(当标签时,但不是点击时).我找不到摆脱它的方法(FocusVisualStyle="{x:Null}"没有帮助).
在内部,WebBrowser永远不会得到关注.对于逻辑焦点(FocusManager)和输入焦点(键盘)都是如此.将Keyboard.GotKeyboardFocusEvent和FocusManager.GotFocusEvent从不事件被解雇的web浏览器(虽然他们都对按钮做在同一个焦点范围).即使当插入符号是web浏览器内,FocusManager.GetFocusedElement(mainWindow)指向先前聚焦元件(按钮)和Keyboard.FocusedElement是null.同时,((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) 是否可以从C#控制和实例化Chrome浏览器?比如打开一个新窗口,更改URL,重新加载选项卡等等.
我已经找了一个C#Chrome API,但只能在https://developer.chrome.com/找到一个Javascript ,我在这里找到的最好的是C# - 如何控制Chrome浏览器 - 最好的答案是查看API.
根据以下链接和我的控制台应用程序,该方法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.Drawing和System.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) 我参与了一个网站的开发,该网站有大量用户通过AOL桌面v9.7 for Windows 查看我们的网站- 它自己生成浏览器窗口.在调试时,我没有通常可以调用的工具(例如Chrome的开发者控制台 ; Firebug; MSIE的F12开发人员工具).
当在AOL桌面内时,我似乎没有任何这些或类似的东西.是否有我可以调用的开发者模式或控制台,发掘?
.net ×4
c# ×4
browser ×2
wpf ×2
aol-desktop ×1
debugging ×1
focus ×1
keyboard ×1
memory ×1
memory-leaks ×1
vb.net ×1
winforms ×1
wpf-controls ×1