积极答复者
关于webbrowser的navigate方法问题

问题
答案
-
如何判断WebBrowser浏览器网页加载完成
- The blog of typewriter職人
- Convert C# to VB.NET
- /*If my concept is wrong ,please correct me.Thanks.*/
- 已标记为答案 wizardhy 2012年2月11日 2:21
-
Hi wizardhy,
欢迎来到MSDN论坛!
您可以参考下面的链接:
How To Determine When a Page Is Done Loading in WebBrowser Control
http://support.microsoft.com/kb/q180366/在All-In-One Code Framework 中有一个关于WebBrowserLoadComplete 的实例,您可以下载All-In-One Code 后查找该示例:http://1codechs.codeplex.com/releases/view/76176
抱歉,我没有能找到该示例的直接链接。
它的摘要如下:
这个实例演示了如何确定页面在 WebBrowser 控件中完成加载.
在页面没有嵌套框架的情况下,DocumentComplete 事件在所有事情完成后,会被引发一次.
当页面有多个嵌套框架时, DocumentComplete 事件会被多次引发.
要检查一个页面是否已经加载完全,你需要检查是否事件的发送次数与WebBrowser控件的相同.
注意:
1. 在内嵌框架集的一个内嵌框架中,如果用户单击一个链接,该链接在其自身的页面中打开
一个新页,并保持内嵌框架集的其余部分保持不变,WebBrowser 控件的 LoadCompleted
事件将不会被激发,你需要检查该特定内嵌框架的 DocumentComplete 事件.
2. 如果你访问一些页面,例如 http://www.microsoft.com, 你可能发现,LoadCompleted 事
件不是最后的事件.这是因为,在页面加载完成后,该页面可能自己加载其他链接.
它提供了下面的类:
DWebBrowserEvents2Helper 类实现了 DWebBrowserEvents2 接口来检查是否完成页面加载.
如果 WebBrowser 控件装载一个普通的、无内嵌框架的 HTML 页面, 在所有事情完成之后,
DocumentComplete 事件会被引发一次.
如果 WebBrowser 控件装载了许多内嵌框架, DocumentComplete 会被多次引发.
DocumentComplete 事件有一个 pDisp 参数,它是框架( shdocvw )的 IDispatch.该框架中
DocumentComplete 被引发.
然后我们可以检查是否 DocumentComplete 的 pDisp 参数与浏览器的 ActiveXInstance 相同.
private class DWebBrowserEvents2Helper : StandardOleMarshalObject, DWebBrowserEvents2
{
private WebBrowserEx parent;
public DWebBrowserEvents2Helper(WebBrowserEx parent)
{
this.parent = parent;
}
public void DocumentComplete(object pDisp, ref object URL)
{
string url = URL as string;
if (string.IsNullOrEmpty(url)
|| url.Equals("about:blank", StringComparison.OrdinalIgnoreCase))
{
return;
}
if (pDisp != null && pDisp.Equals(parent.ActiveXInstance))
{
var e = new WebBrowserDocumentCompletedEventArgs(new Uri(url));
parent.OnLoadCompleted(e);
}
}
public void BeforeNavigate2(object pDisp, ref object URL, ref object flags,
ref object targetFrameName, ref object postData, ref object headers,
ref bool cancel)
{
string url = URL as string;
if (string.IsNullOrEmpty(url)
|| url.Equals("about:blank", StringComparison.OrdinalIgnoreCase))
{
return;
}
if (pDisp != null && pDisp.Equals(parent.ActiveXInstance))
{
WebBrowserNavigatingEventArgs e = new WebBrowserNavigatingEventArgs(
new Uri(url), targetFrameName as string);
parent.OnStartNavigating(e);
}
}
}祝,顺利!
yoyo
Yoyo Jiang[MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 wizardhy 2012年2月14日 9:01
全部回复
-
-
如何判断WebBrowser浏览器网页加载完成
- The blog of typewriter職人
- Convert C# to VB.NET
- /*If my concept is wrong ,please correct me.Thanks.*/
- 已标记为答案 wizardhy 2012年2月11日 2:21
-
Hi wizardhy,
欢迎来到MSDN论坛!
您可以参考下面的链接:
How To Determine When a Page Is Done Loading in WebBrowser Control
http://support.microsoft.com/kb/q180366/在All-In-One Code Framework 中有一个关于WebBrowserLoadComplete 的实例,您可以下载All-In-One Code 后查找该示例:http://1codechs.codeplex.com/releases/view/76176
抱歉,我没有能找到该示例的直接链接。
它的摘要如下:
这个实例演示了如何确定页面在 WebBrowser 控件中完成加载.
在页面没有嵌套框架的情况下,DocumentComplete 事件在所有事情完成后,会被引发一次.
当页面有多个嵌套框架时, DocumentComplete 事件会被多次引发.
要检查一个页面是否已经加载完全,你需要检查是否事件的发送次数与WebBrowser控件的相同.
注意:
1. 在内嵌框架集的一个内嵌框架中,如果用户单击一个链接,该链接在其自身的页面中打开
一个新页,并保持内嵌框架集的其余部分保持不变,WebBrowser 控件的 LoadCompleted
事件将不会被激发,你需要检查该特定内嵌框架的 DocumentComplete 事件.
2. 如果你访问一些页面,例如 http://www.microsoft.com, 你可能发现,LoadCompleted 事
件不是最后的事件.这是因为,在页面加载完成后,该页面可能自己加载其他链接.
它提供了下面的类:
DWebBrowserEvents2Helper 类实现了 DWebBrowserEvents2 接口来检查是否完成页面加载.
如果 WebBrowser 控件装载一个普通的、无内嵌框架的 HTML 页面, 在所有事情完成之后,
DocumentComplete 事件会被引发一次.
如果 WebBrowser 控件装载了许多内嵌框架, DocumentComplete 会被多次引发.
DocumentComplete 事件有一个 pDisp 参数,它是框架( shdocvw )的 IDispatch.该框架中
DocumentComplete 被引发.
然后我们可以检查是否 DocumentComplete 的 pDisp 参数与浏览器的 ActiveXInstance 相同.
private class DWebBrowserEvents2Helper : StandardOleMarshalObject, DWebBrowserEvents2
{
private WebBrowserEx parent;
public DWebBrowserEvents2Helper(WebBrowserEx parent)
{
this.parent = parent;
}
public void DocumentComplete(object pDisp, ref object URL)
{
string url = URL as string;
if (string.IsNullOrEmpty(url)
|| url.Equals("about:blank", StringComparison.OrdinalIgnoreCase))
{
return;
}
if (pDisp != null && pDisp.Equals(parent.ActiveXInstance))
{
var e = new WebBrowserDocumentCompletedEventArgs(new Uri(url));
parent.OnLoadCompleted(e);
}
}
public void BeforeNavigate2(object pDisp, ref object URL, ref object flags,
ref object targetFrameName, ref object postData, ref object headers,
ref bool cancel)
{
string url = URL as string;
if (string.IsNullOrEmpty(url)
|| url.Equals("about:blank", StringComparison.OrdinalIgnoreCase))
{
return;
}
if (pDisp != null && pDisp.Equals(parent.ActiveXInstance))
{
WebBrowserNavigatingEventArgs e = new WebBrowserNavigatingEventArgs(
new Uri(url), targetFrameName as string);
parent.OnStartNavigating(e);
}
}
}祝,顺利!
yoyo
Yoyo Jiang[MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 wizardhy 2012年2月14日 9:01