📄 pagedwebbrowser.cs
字号:
/// </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 + -