⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pagedwebbrowser.cs

📁 自己做的一个浏览器~~大家请看看~如果合意给个彩头
💻 CS
📖 第 1 页 / 共 2 页
字号:
		/// </summary>
		/// <param name="url">网址</param>
		/// <returns>符合Query要求的网址</returns>
		private string Fitler(string url)
		{
			url = url.Replace("#", "%23");
			return url;
		}
		/// <summary>
		/// 设置浏览器事件处理函数
		/// </summary>
		/// <param name="web">浏览器对象</param>
		protected void AttachEvent(WebBrowserEx web)
		{
			web.NewWindow2 += new EventHandler<WebBrowserExNavigatingEventArgs>(Web_NewWindow2);
			web.CanGoBackChanged += new EventHandler(Web_CanGoBackChanged);
			web.CanGoForwardChanged += new EventHandler(Web_CanGoForwardChanged);
			web.StatusTextChanged += new EventHandler(Web_StatusTextChanged);
			web.Navigated += new WebBrowserNavigatedEventHandler(Web_Navigated);
			web.ProgressChanged += new WebBrowserProgressChangedEventHandler(Web_ProgressChanged);
		}
		/// <summary>
		/// 取消浏览器事件处理函数
		/// </summary>
		/// <param name="web">浏览器对象</param>
		protected void DetachEvent(WebBrowserEx web)
		{
			web.NewWindow2 -= new EventHandler<WebBrowserExNavigatingEventArgs>(Web_NewWindow2);
			web.CanGoBackChanged -= new EventHandler(Web_CanGoBackChanged);
			web.CanGoForwardChanged -= new EventHandler(Web_CanGoForwardChanged);
			web.StatusTextChanged -= new EventHandler(Web_StatusTextChanged);
			web.Navigated -= new WebBrowserNavigatedEventHandler(Web_Navigated);
			web.ProgressChanged -= new WebBrowserProgressChangedEventHandler(Web_ProgressChanged);
		}
		
		#endregion

		#region Protected 浏览器页面操作

		/// <summary>
		/// 获取指定浏览器页面
		/// </summary>
		/// <param name="id">浏览器页面对象id</param>
		/// <returns>浏览器页面对象</returns>
		internal WebPage QueryPage(string id)
		{
			foreach (WebPage page in this.TabPages)
				if (page.Name == id)
					return page;
			return null;
		}
		/// <summary>
		/// 创建新浏览器页面
		/// </summary>
		/// <param name="cmd">要执行的命令</param>
		/// <param name="bringToFront">true选中新建的页面,false保持当前页面</param>
		/// <returns>浏览器页面对象</returns>
		internal WebPage CreatePage(string cmd, bool bringToFront)
		{
			WebPage page = new WebPage();
			page.Name = Guid.NewGuid().ToString();
			AttachEvent(page.Web);
			this.TabPages.Add(page);
			ProcessCommand(cmd, page.Web);
			if (bringToFront)
				this.SelectTab(page);
			if (this.TabCount == 1)
				this.OnSelected(new TabControlEventArgs(page, 0, TabControlAction.Selected));
			return page;
		}
		/// <summary>
		/// 删除浏览器页面
		/// </summary>
		/// <param name="page">要删除的浏览器页面对象</param>
		internal void RemovePage(WebPage page)
		{
			if (page != null)
			{
				page.Web.Stop();
				DetachEvent(page.Web);
				this.TabPages.Remove(page);
				page.Dispose();
			}
		}
		#endregion

		#region Public

		/// <summary>
		/// 添加命令
		/// </summary>
		/// <param name="type">命令类型</param>
		/// <param name="url">网址</param>
		public void AddCommand(string type,string url)
		{
			cmdList.Add(type, url);
		}
		/// <summary>
		/// 在当前的页面执行命令
		/// </summary>
		/// <param name="cmd">要执行的命令</param>
		public void Open(string cmd)
		{
			ProcessCommand(cmd, Web);
		}
		/// <summary>
		/// 创建新浏览器页面并执行命令
		/// </summary>
		/// <param name="cmd">要执行的命令</param>
		/// <param name="bringToFront">true选中新建的页面,false保持当前页面</param>
		/// <returns>浏览器页面对象id</returns>
		public string CreateNewPage(string cmd,bool bringToFront)
		{
			WebPage page = CreatePage(cmd, bringToFront);
			return page.Name;
		}
		/// <summary>
		/// 创建新浏览器页面并执行命令
		/// </summary>
		/// <param name="cmd">要执行的命令</param>
		/// <returns>浏览器对象</returns>
		public WebBrowserEx CreateNewPage(string cmd)
		{
			return CreatePage(cmd, true).Web;
		}
		/// <summary>
		/// 获取指定浏览器对象
		/// </summary>
		/// <param name="page">浏览器页面id</param>
		/// <returns>浏览器对象</returns>
		public WebBrowserEx QueryWeb(string id)
		{
			WebPage page = QueryPage(id);
			if (page != null)
				return page.Web;
			return null;
		}
		/// <summary>
		/// 删除浏览器页面
		/// </summary>
		/// <param name="id">要删除页面对象的id</param>
		public void RemovePage(string id)
		{
			RemovePage(QueryPage(id));
		}
		/// <summary>
		/// 删除当前页面
		/// </summary>
		public void RemoveSelectedPage()
		{
			RemovePage(SelectedTab as WebPage);
		}
		/// <summary>
		/// 设置当前页面字体缩放值
		/// </summary>
		/// <param name="zoomLevel">字体缩放值</param>
		public void SetZoom(WebBrowserEx.ZoomLevel zoomLevel)
		{
			this.Enabled = false;
			if (Web != null)
				Web.SetZoom(zoomLevel);
			this.Enabled = true;
		}/// <summary>
		/// 更新状态
		/// </summary>
		public void UpdateState()
		{
			WebBrowserEx web = Web;
			if (web != null)
			{
				if (CanGoBackChanged != null)
					CanGoBackChanged(web, EventArgs.Empty);
				if (CanGoForwardChanged != null)
					CanGoForwardChanged(web, EventArgs.Empty);
				if (StatusTextChanged != null)
					StatusTextChanged(web, EventArgs.Empty);
				if (PageLocationChanged != null)
					PageLocationChanged(web, EventArgs.Empty);
			}
		}

		#endregion

		#region 重载事件处理函数

		protected override void OnMouseDoubleClick(MouseEventArgs e)
		{
			base.OnMouseDoubleClick(e);
			this.Enabled = false;
			if (e.Button == MouseButtons.Left)
				RemoveSelectedPage();
			this.Enabled = true;
		}

		protected override void OnSelected(TabControlEventArgs e)
		{
			base.OnSelected(e);
			this.Enabled = false;
			WebPage page = e.TabPage as WebPage;
			if (page != null)
			{
				pageList.Select(page);
				UpdateState();
			}
			this.Enabled = true;
		}

		protected override void OnControlAdded(ControlEventArgs e)
		{
			base.OnControlAdded(e);
			WebPage page = e.Control as WebPage;
			if (page != null)
				pageList.Add(page);
		}

		protected override void OnControlRemoved(ControlEventArgs e)
		{
			base.OnControlRemoved(e);
			WebPage page = e.Control as WebPage;
			if (page != null)
			{
				pageList.Remove(page);
				page = pageList.GetTopPage();
				if (page != null)
					this.SelectTab(page);
			}
		}

		#endregion

		#region WebBrowserEx & WebPage 事件处理函数

		private void Web_NewWindow2(object sender, WebBrowserExNavigatingEventArgs e)
		{
			//获取用户按键状态
			bool allowPopup = (e.NavigationContext == UrlContext.None) || ((e.NavigationContext & UrlContext.OverrideKey) == UrlContext.OverrideKey);
			if (!allowPopup)
			{
				//根据拦截弹出窗口级别判断是否弹出窗口
				switch (BlockLevel)
				{
					case PopupBlockLevel.None:
						allowPopup = true;
						break;
					case PopupBlockLevel.Low:
						//根据浏览器安全级别判断是否弹出窗口
						WebBrowser webbrowser=sender as WebBrowser;
						if (webbrowser.EncryptionLevel != WebBrowserEncryptionLevel.Insecure)
							allowPopup = true;
						else
							goto case PopupBlockLevel.Medium;
						break;
					case PopupBlockLevel.Medium:
						if ((e.NavigationContext & UrlContext.UserFirstInited) == UrlContext.UserFirstInited && (e.NavigationContext & UrlContext.UserInited) == UrlContext.UserInited)
							allowPopup = true;
						break;
				}
			}
			if (allowPopup)
			{
				//创建新页面
				WebBrowserEx web = CreatePage(null, false).Web;
				e.AutomationObject = web.Application;
			}
			else
				e.Cancel = true;	//取消操作
		}

		#region 状态更新事件处理

		private void Web_Navigated(object sender, WebBrowserNavigatedEventArgs e)
		{
			if (Web == sender)
			{
				if (Navigated != null)
					Navigated(sender, e);
				if (PageLocationChanged != null)
					PageLocationChanged(sender, EventArgs.Empty);
			}
		}

		private void Web_CanGoBackChanged(object sender, EventArgs e)
		{
			if ((Web == sender) && (CanGoBackChanged != null))
				CanGoBackChanged(sender, e);
		}

		private void Web_CanGoForwardChanged(object sender, EventArgs e)
		{
			if ((Web == sender) && (CanGoForwardChanged != null))
				CanGoForwardChanged(sender, e);
		}

		private void Web_StatusTextChanged(object sender, EventArgs e)
		{
			if ((Web == sender) && (StatusTextChanged != null))
				StatusTextChanged(sender, e);
		}

		private void Web_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
		{
			if ((Web == sender) && (ProgressChanged != null))
				ProgressChanged(sender, e);
		}

		#endregion

		#endregion
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -