Tag: webbrowser control

使用WPF WebBrowser显示内容来阻止滚动条

我正在使用WPF WebBrowser组件来显示一些非常简单的HTML内容。 但是,由于我事先并不知道内容大小,因此当我加载某些数据集时,我正在获取控件上的滚动条。 基本上,我如何强制(或以其他方式影响相当于强制)WebBrowser扩展大小,以便显示所有内容而不需要滚动条?

如何检测WebBrowser控件中的javascript执行

我的C#应用​​程序中有一个WebBrowser控件。 webbrowser在用户的控制之下,也就是说,他可以加载他的计算机可以在Web上访问的任何网页(当然受到代理,主机文件等的限制)。 我需要知道并在webbrowser组件中加载的页面内有javascript调用时收到通知。 第一个例子:给出这样的链接 test 当用户点击链接时,我需要知道已经调用了函数“jsFunct”。 第二个例子:给出一个叫做的电话 window.setTimeout(“jsFunct()”, 1000); 我需要知道,在执行脚本1秒后,调用了函数jsFunct。 最好的方法是在调用函数时触发事件。 如果事件可以执行javascript代码,或者至少是参数中的函数名称,那也会很棒。 编辑: 即使问题与webbrowser组件有关,任何允许用户检测javascript激活(甚至通过js)的东西也没关系,能够注入处理javascript事件的js并将其传递给触发某些事件的wb控件它可以处理。

为什么我的IDocHostUIHandler实现被忽略

我已经从WebBrowser控件创建了派生控件,该控件具有自己的IDocHostUIHandler实现,遵循CreateWebBrowserSiteBase方法的想法: WebBrowser.WebBrowserSite类提供OLE IDocHostUIHandler接口的默认实现。 您可以提供自己的此接口实现,也可以实现任何其他WebBrowser ActiveX控件接口,以自定义控件的行为。 这个问题不起作用。 我的代码看起来如下: [PermissionSetAttribute(SecurityAction.LinkDemand, Name = “FullTrust”)] public MyBrowser(){} protected override WebBrowserSiteBase CreateWebBrowserSiteBase() { var manager = new NewWebBrowserSite(this); return manager; } protected class NewWebBrowserSite : WebBrowserSite, UnsafeNativeMethods.IDocHostUIHandler { private MyBrowser host; public NewWebBrowserSite(MyBrowser h) : base(h) { this.host = h; } int UnsafeNativeMethods.IDocHostUIHandler.ShowContextMenu(int dwID, NativeMethods.POINT pt, object pcmdtReserved, object pdispReserved) […]

在documentcompleted事件之前禁用从webbrowser控件加载图像

我想阻止页面中的图像加载到WebBrowser控件中。 我希望它在DocumentCompleted事件发生之前发生。 有没有办法做到这一点?

WebBrowser:拖放

我想拦截WebBrowser控件上的拖放操作。 更确切地说,我希望能够基于文件扩展名取消或批准拖放事件(并在WebBrowser外部处理该文件),并且我想使拖放图标看起来像常规图标: http : //snag.gy/DUjMc。 jpg ,不像这个: http : //snag.gy/ExX19.jpg 。 我相信我需要实现自定义IDocHostUIHandler并拦截GetDropTarget。 不幸的是,我没有成功。 我使用此代码作为我的“基本”代码: https : //stackoverflow.com/a/19739699/2758677和我做的这部分: http : //pastebin.com/Ux947Eck 。 永远不会调用GetDropTarget。

如何更改Web浏览器控件中的下拉框?

所以我有一个我想要改变的列表框,看起来像这样: 如何更改7月份的价值? 我需要100%自动化并将其更改为1月。 我在各种网站上做了很多帐户,需要将它们全部更改回同一个生日。 是的,我知道我必须找到它的ID等。

Webbrowser控件与透明背景

我正在使用Windows phone 8应用程序。 这是我的代码: 我绑定XAML中的数据: 这里WebView是data binded to webbrowser control的data binded to webbrowser control 。 我有这样的内容: {0}<body bgcolor=BGCOLOR style=\"margin:0px;padding:0px;\" " 这里bgcolor=BGCOLOR我希望bgcolor是透明的。 我试过但它不起作用。

使用Web响应加载Web浏览器

我正在创建在线帐户的应用程序(假设Gmail)当用户运行应用程序时,我将WebBrowser控件导航到Url.User填写注册表并完成注册。 它在这里工作正常。 现在,用户希望使用代理来访问该站点。 我希望用户以另一种forms设置代理,当他运行应用程序时,他的请求由该代理自动处理。 一个解决方案是我首先导航到代理,然后用户进入他的网站,然后浏览该代理服务器。 但我希望该用户看不到代理服务器网页,只看到通过代理访问的欲望页面。 我在一篇post中读到了使用WebRequest类导航到网站并设置我的代理 请求代理,然后加载WebBrowser与此响应。 如何设置WebBrowser代理如何使用响应加载Webbrowser控件? 这会按预期工作吗?

WebBrowserSite:如何在派生类中调用私有COM接口方法?

这是挑战。 我是从Framework的WebBrowserSite类派生出来的。 我的派生类ImprovedWebBrowserSite一个实例是通过WebBrowser.CreateWebBrowserSiteBase返回的,我在WebBrowser类的派生版本中覆盖了它 – 专门用于提供自定义站点对象。 Framework的WebBrowser实现进一步将其传递给底层的非托管WebBrowser ActiveX控件。 到目前为止,我已经设法在我的ImprovedWebBrowserSite实现中覆盖IDocHostUIHandler (像这样 )。 我现在正在寻找更多的核心COM接口,比如IOleClientSite ,我想将它传递给WebBrowserSite 。 所有这些都通过ComImport暴露给COM,但是通过Framework的WebBrowserSite / UnsafeNativeMethods实现声明为private或internal 。 因此,我无法在派生类中明确地重新实现它们。 我必须定义自己的版本,就像我使用IDocHostUIHandler 。 所以,问题是,如何从我的派生类中调用WebBrowserSite定义的私有或内部COM接口的方法? 例如,我想调用IOleClientSite.GetContainer 。 我可以使用reflection(像这样 ),但这将是最后的手段,其次是从头开始重新实现WebBrowser 。 我的想法是,因为Framework的私有UnsafeNativeMethods.IOleClientSite和我自己的ImprovedWebBrowserSite.IOleClientSite都是COM接口,使用ComImport属性声明,相同的GUID和相同的方法签名。 .NET 4.0+中有COM类型等价 ,因此必须有一种方法可以在没有reflection的情况下完成。 [更新]现在我已经有了解决方案 ,我相信它为自定义WebBrowser控件的WinForms版本打开了一些新的和有趣的可能性。 这个版本的问题是在我最初尝试以更抽象的forms提出问题之后创建的,被评论员称为误导。 评论已被删除,但我决定保留这两个版本。 为什么我不想用reflection来解决这个问题? 原因如下: 依赖于内部或私有方法的实际符号名称,由WebBrowserSite的实现者给出,与COM接口不同,后者是关于二进制v表合同。 庞大的reflection代码。 例如,考虑通过Type.InvokeMember调用base的私有TranslateAccelerator ,我有大约20个这样的方法来调用。 虽然不太重要,但效率:通过reflection的后期绑定调用总是比通过v-table直接调用COM接口方法效率低。

DocumentCompleted多次触发 – 接受StackOverflow回答不起作用

我测试我的WebBrowser是否完成了: webBrowser2.DocumentCompleted += (s, e) => { // Do stuff } 我访问的网页是大量的JS文件和iframe和东西,所以我使用下面的函数来确保它是完成加载的实际页面。 webBrowser2.DocumentCompleted += (s, e) => { if (e.Url.AbsolutePath != (s as WebBrowser).Url.AbsolutePath) { return; } // Do stuff } 但是,它似乎仍然无法正常工作。 我做错了什么,或者这在语法上是否正确,我的代码中还有其他错误?