.NET Framework 接收BeforeNavigate2事件BUG的替代方法

[.NET Framework 接收BeforeNavigate2事件BUG的替代方法]

????这是一篇微软网络上找到的文章,现在也许不适用了,但如果仍用.NET Framework 1.0,则只有这个方法可以解决这个问题了。


Liju Thomas [@online.microsoft.com]
Regarding BeforeNavigate2 it a bug as mentioned in the KB article.
But you can connect directly to IWebBrowserEvents (NOT IWebBrowserEvents2)
and sink to the BeforeNavigate event.

sample code:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Data;
using SHDocVw;

namespace InetTest
{
????///
????/// Summary description for Form1.
????///

????public class Form1 : System.Windows.Forms.Form, DWebBrowserEvents
????{
????????private AxSHDocVw.AxWebBrowser axWebBrowser1;
????????private System.Windows.Forms.Button button1;
????????private System.Windows.Forms.Label label1;
????????private UCOMIConnectionPoint icp;
????????private int cookie = -1;

????????///
????????/// Required designer variable.
????????///

????????private System.ComponentModel.Container components = null;
????????private Object obj;
????????public Form1()
????????{
????????????//
????????????// Required for Windows Form Designer support
????????????//
????????????InitializeComponent();

????????????// Sink to webbrowser events
????????????UCOMIConnectionPointContainer icpc =
????????????????(UCOMIConnectionPointContainer)axWebBrowser1.GetOcx();

????????????Guid g = typeof(DWebBrowserEvents).GUID;
????????????icpc.FindConnectionPoint(ref g, out icp);
????????????icp.Advise(this, out cookie);
????????}
????????///
????????/// Clean up any resources being used.
????????///

????????protected override void Dispose( bool disposing
????????{
????????????if( disposing
????????????{
????????????????// Release event sink
????????????????if (-1 != cookie) icp.Unadvise(cookie);
????????????????cookie = -1;

????????????????if (components != null)
????????????????{
????????????????????components.Dispose();
????????????????}
????????????}
????????????base.Dispose( disposing ;
????????}
#region Windows Form Designer generated code
????????///
????????/// Required method for Designer support - do not modify
????????/// the contents of this method with the code editor.
????????///

????????private void InitializeComponent()
????????{
????????????System.Resources.ResourceManager resources = new
System.Resources.ResourceManager(typeof(Form1));
????????????this.axWebBrowser1 = new AxSHDocVw.AxWebBrowser();
????????????this.button1 = new System.Windows.Forms.Button();
????????????this.label1 = new System.Windows.Forms.Label();
????????????
((System.ComponentModel.ISupportInitialize)(this.axWebBrowser1)).BeginInit()
;
????????????this.SuspendLayout();
????????????//
????????????// axWebBrowser1
????????????//
????????????this.axWebBrowser1.Enabled = true;
????????????this.axWebBrowser1.Location = new System.Drawing.Point(16, 8);
????????????this.axWebBrowser1.OcxState =
((System.Windows.Forms.AxHost.State)(resources.GetObject("axWebBrowser1.OcxS
tate"));
????????????this.axWebBrowser1.Size = new System.Drawing.Size(456, 208);
????????????this.axWebBrowser1.TabIndex = 0;
????????????//
????????????// button1
????????????//
????????????this.button1.Location = new System.Drawing.Point(16, 232);
????????????this.button1.Name = "button1";
????????????this.button1.TabIndex = 1;
????????????this.button1.Text = "button1";
????????????this.button1.Click += new System.EventHandler(this.button1_Click);
????????????//
????????????// label1
????????????//
????????????this.label1.Location = new System.Drawing.Point(112, 232);
????????????this.label1.Name = "label1";
????????????this.label1.Size = new System.Drawing.Size(344, 23);
????????????this.label1.TabIndex = 2;
????????????this.label1.Text = "label1";
????????????//
????????????// Form1
????????????//
????????????this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
????????????this.ClientSize = new System.Drawing.Size(480, 273);
????????????this.Controls.AddRange(new System.Windows.Forms.Control[] {
???????????????????????????????????????????????????????????????????????? this.label1,
???????????????????????????????????????????????????????????????????????? this.button1,
???????????????????????????????????????????????????????????????????????? this.axWebBrowser1});
????????????this.Name = "Form1";
????????????this.Text = "Form1";
????????????
((System.ComponentModel.ISupportInitialize)(this.axWebBrowser1)).EndInit();
????????????this.ResumeLayout(false);

????????}
#endregion

????????// DWebBrowserEvents Implementation
????????public void BeforeNavigate(string url, int flags,
????????????string targetFrameName, ref object postData,
????????????string headers, ref bool cancel)
????????{
????????????label1.Text = "BeforeNavigate to " + url;
????????}
????????public void NavigateComplete(string url) { }
????????public void StatusTextChange(string text) { }
????????public void ProgressChange(int progress, int progressMax) { }
????????public void DownloadComplete() { }
????????public void CommandStateChange(int command, bool enable) { }
????????public void DownloadBegin() { }
????????public void NewWindow(string url, int flags, string targetFrameName, ref
object postData, string headers, ref bool processed) { }
????????public void TitleChange(string text) { }
????????public void FrameBeforeNavigate(string url, int flags, string
targetFrameName, ref object postData, string headers, ref bool cancel) { }
????????public void FrameNavigateComplete(string url) { }
????????public void FrameNewWindow(string url, int flags, string targetFrameName,
ref object postData, string headers, ref bool processed) { }
????????public void Quit(ref bool Cancel) { }
????????public void WindowMove() { }
????????public void WindowResize() { }
????????public void WindowActivate() { }
????????public void PropertyChange(string property) { }

????????///
????????/// The main entry point for the application.
????????///

????????[STAThread]
????????static void Main()
????????{
????????????Application.Run(new Form1());
????????}

????????private void button1_Click(object sender, System.EventArgs e)
????????{
????????????axWebBrowser1.Navigate (" www.msn.com", ref obj, ref obj, ref obj, ref
obj);
????????}
????}
}

This posting is provided "AS IS" with no warranties, and confers no rights.
You assume all risk for your use.

(C)2001 Microsoft Corporation. All rights reserved.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值