我开机后就一直有个叫WEBBROWSER的网页小窗口d出。。

我开机后就一直有个叫WEBBROWSER的网页小窗口d出。。,第1张

点开始 → 运行 → 输入regedit 进入注册表

在注册表编辑器里将鼠标点到左上角的"我的电脑"上,准备搜索

点编辑 → 查找 → 输入那网页的名字,应该是 WEBBROWSER 吧,

开始搜索,找到多少删除多少,

重起

你的描述有待改进。

你的意思是不是这样:

C#中webBrowser下载文件时,模拟下载按钮的点击后,会d出对话框,这个对话框提示这个地址不能下载。

有个可能性是:模拟 *** 作前,页面可能有没执行的js或ajax

如果你还没解决,请把具体页面(url)和相关代码写出来,具体问题具体分析

给出以下三种方法你可以试一下:

方法一:

控制webbrowser不d出IE窗口的方法是在控件的NewWindow2事件里面添加如下代码:

Set ppDisp = WebBrowserTempObject ' WebBrowserTemp为自己在窗体中另外添加的Webbrowser控件

如果禁止d出窗口,不做处理,则在NewWindow2事件里添加如下代码即可:

Cancel = True

方法二:

利用OnDownloadBegin和OnDownloadComplete

以CHtmlView为例,d出的广告窗口都是通过CHtmlView::OnNewWindow2( LPDISPATCH ppDisp, BOOL Cancel );打开的。

关于OnNewWindow2不想多说,只说说这第2个参数 BOOL Cancel

当Cancel = false的时候就不能打开新窗口了,如果你的CHtmlView的该参数一直为FALSE那么一切d出窗口都不能打开,广告窗口自然就没了。

那~~~要是总FALSE岂不是正常网页也无法浏览了?

别忙,接下来要做的就是在适当的时候让这个参数返回FALSE。

抛开CHtmlView我们回头来看看IE下载网页d出广告窗口的过程:

OnDownloadBegin ---->发现windowopen等Js或者vbs ---->OnNewWindow2 ---->OnDownloadComplete

了解了上述过程之后什么时候让OnNewWindow2的第2个参数为FALSE你就清楚了吧!

下面跟我实战。

给你的从CHtmlView派生而来的CNoPopHtmlView加一个成员变量BOOL m_bPop;

在构造函数里给m_bPop初始化为:m_bPop = TRUE;

重载OnDownloadBegin虚函数,在其中加入:m_bPop = FALSE;

重载OnDownloadComplete虚函数,在其中加入:m_bPop = TRUE;

重载OnNewWindow2虚函数,在其中加入:

Cancel = m_bPop;

这样CNoPopHtmlView将不在打开广告窗口,关键在于了解IE的下载、d出窗口的过程。(本文的方法同样对CWebBrowser2适用、不论你是用VC还是Delphi都有效,关键在于了解IE下载、d出窗口的过程)

上面说的是在自编浏览器中过滤广告窗口。

其实你完全可以利用BHO(Browser Helper Object)写一个针对IE的广告窗口过滤器。

在BHO里你利用IObjectWithSiteImpl::SetSite获得IWebBrowser2指针,然后利用Invoke处理OnDownloadBegin/OnDownloadComplete/OnNewWindow2等事件就可以,模式同上。

方法三:

设属性 silent 为 True

点击WebBrowser超链接时,如果不做任何处理,将会直接调用IE打开对应的页面,如果想在Delphi的窗口中打开超链接所对应的页面则需要进行简单的处理。

可以新建主窗口,TMainForm,在主窗口中放置一个TWebBrowser控件,WebBrowserMain,用于显示网页主页面(点击此页面中的超链接将在新Delphi窗口中打开超链接页面)。

再另外新建一个Delphi窗口或对话框,TReadForm,并在其中添加一个WebBrowser控件,WebBrowserRead,用于显示超链接页面。在主窗口WebBrowserMain控件的OnNewWindow2事件中添加下面的代码,最后完成。

我的处理方法:

刚开始,我使用了这样的思路:针对所有可能出现的情况,找个各个不同方法来处理。

比如说,对于<a herf=’’的这种情况,就用wb_ContainerStatusText方法,但是要加入一个判断。If(wb_ContainerStatusText!=””)。对于windowopen和RegisterStartupScript的,可以通过替换js来实现。

本来的windowopen函数,在程序完成加载之后,我把这个函数修改成windowexternalopen,

然后,我把我的AppBrowser类里面加入几个public的Open函数来对应原来的js的open函数就可以了。

这是一个代码实现。

private void wb_Container_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

{

//for windowsopen

if (wb_ContainerDocumentTextIndexOf("windowopen(") > -1 || wb_ContainerDocumentTextIndexOf("windowclose()") > -1)

{

wb_ContainerDocumentText = wb_ContainerDocumentTextReplace("windowopen(", "windowexternalopen(")Replace("windowclose()","windowexternalclose()");

}

}

HtmlElement btn=thiswebBrowser1DocumentgetElementById("这里填写按钮或a标签的id");

btnClick+=btn_Click;

private void btn_Click(object sender,HtmlElementEventArgs e){

//这里是你的打开新的窗口Form1的 *** 作

1、在打开的ie浏览器窗口右上方点击齿轮图标,选择“Internet选项”,如下图所示:

2、在打开的Internet选项窗口中,切换到安全栏,在安全选卡中点击“自定义级别”,如下图所示:

3、在“安全设置-Internet 区域”界面找到“Java 小程序脚本”、“活动脚本”,并将这两个选项都选择为“禁用”,然后点击确定,如下图所示:

在窗体的通用代码区放入如下代码:

Dim WithEvents Web_V1 As SHDocVwCtlWebBrowser_V1

然后在代码区放入如下代码:

Private Sub Web_V1_NewWindow(ByVal URL As String, ByVal Flags As Long, ByVal TargetFrameName As String, PostData As Variant, ByVal Headers As String, Processed As Boolean)

Processed = True

WebBrowser1Navigate URL

End Sub

此外,网页的调用要改为:

WebBrowser1Navigate "ftp://1921681103"

补充说明,以上代码是从我自己写的软件中复制出来的,肯定是有效的,你如果用着不好使那我也没辙了。

以上就是关于我开机后就一直有个叫WEBBROWSER的网页小窗口d出。。全部的内容,包括:我开机后就一直有个叫WEBBROWSER的网页小窗口d出。。、C#中webBrowser下载文件时,模拟下载按钮的点击后,会d出对话框。怎么解决Form提交。、如何在vb中控制webbrowser的d出窗口等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9339629.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存