using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Threading;
using System.Web;
using System.ComponentModel;
using System.Security.Permissions;
using mshtml;
namespace US.Browser.IE
{
///
/// 建立新窗口
///
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class BrowserListener
{
public WebBrowser _UWB;
public BrowserDAO _UBF;
public RespondWeb _UWF;
private bool _UTF = false;
private string URL;
bool _UCT = false;
bool _UE = false;
///
/// 无参构造
///
public BrowserListener() { }
///
/// 带参数构造
///
/// 新窗口名字
/// 位置
/// 大小
/// 链接地址
public BrowserListener(string UN, Point UXY, Size UWH, string UURL, BrowserDAO UBF)
{
this._UWB = new BrowerWeb(); URL = UURL; this._UWB.Focus(); this._UBF = UBF;
_UWB.Name = UN; _UWB.Location = UXY; _UWB.Size = UWH; _UWB.ScriptErrorsSuppressed = true; _UWB.ObjectForScripting = new RespondWeb(_UWB, UBF);
_UWB.Url = (UURL == "" ? new System.Uri(Application.StartupPath + "\\html\\blank.html") : new Uri(HttpUtility.UrlDecode(UURL, Encoding.Default)));//
AddEvent((BrowerWeb)this._UWB); //添加事件
}
#region 事件区域
///
/// 添加事件
///
private void AddEvent(BrowerWeb UWB)
{
UWB.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(UWB_DocumentCompleted);//页面加载成功
UWB.FileDownload += new EventHandler(UWB_FileDownload); //页面下载的时候触发
UWB.Navigated += new WebBrowserNavigatedEventHandler(UWB_Navigated);//加载页面
UWB.Navigating += new WebBrowserNavigatingEventHandler(UWB_Navigating); //开始导航
UWB.ProgressChanged += new WebBrowserProgressChangedEventHandler(UWB_ProgressChanged);//下载页面进度
UWB.SizeChanged += new EventHandler(UWB_SizeChanged);//大小发生变化
UWB.WindowClosing += new EventHandler(UWB_WindowClosing);//页面关闭
UWB.PreviewKeyDown += new PreviewKeyDownEventHandler(UWB_PreviewKeyDown);//键盘事件
SHDocVw.WebBrowser _USB = (SHDocVw.WebBrowser)UWB.ActiveXInstance; //SHDocVw.WebBrowser
SHDocVw.WebBrowser_V1 _UMB = (SHDocVw.WebBrowser_V1)UWB.ActiveXInstance;
_USB.NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(_UWB_NewWindow3);//弹出窗口
_USB.NavigateError += new SHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(_USB_NavigateError);//导航错误使用
}
///
/// 导航变化
///
///
///
void UWB_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
if (_UWB.IsBusy == false && _UWB.Url == e.Url && _UWB.ReadyState != WebBrowserReadyState.Uninitialized)
{
_UE = false; _UBF._UWB.Document.InvokeScript("GetJson", new string[] { _UBF.BrowserToJson(_UWB, !_UCT), _UWB.Name });
}
}
///
/// 导航到时错误
///
///
///
///
///
///
void _USB_NavigateError(object pDisp, ref object URL, ref object Frame, ref object StatusCode, ref bool Cancel)
{
_UE = true;
}
///
/// 页面关闭触发
///
///
///
void UWB_WindowClosing(object sender, EventArgs e)
{
//this._UWB.Parent.MouseWheel -= Parent_MouseWheel; //页面关闭
//BrowerWeb _UWB = (BrowerWeb)sender; _UWB.WindowClosing -= UWB_WindowClosing;
//_UBF._UWB.Document.InvokeScript("CloseTag", new object[] { _UWB.Name });
}
///
/// 统一页面加载
///
///
private void UWB_loading(WebBrowser _UWB)
{
_UBF._UWB.Document.InvokeScript("GetJson", new string[] { _UBF.BrowserToJson(_UWB, _UE), _UWB.Name });
}
///
/// 页面加载完毕
///
///
///
void UWB_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser _UBW = (WebBrowser)sender;
if (_UBW.ReadyState == WebBrowserReadyState.Complete && e.Url == _UBW.Url)
{
if (_UBW.Visible == true) { _UBW.Focus(); } _UCT = true; UWB_loading(_UBW);
_UBF._UWB.Document.InvokeScript("GetJson", new string[] { _UBF.BrowserToJson(_UWB, !_UCT), _UWB.Name });
_UBW.Parent.MouseWheel += new MouseEventHandler(Parent_MouseWheel); AddGG(_UBW);
}
}
///
/// 内嵌广告
///
///
void AddGG(WebBrowser UW)
{
UW = UW == null ? UW : _UWB; HtmlDocument _UD = UW.Document; HtmlElement _UDOD = null;
if (UW.Url.ToString().IndexOf("www.sogou.com") > -1) { _UDOD = _UD.GetElementById("kmap_entity_div"); }
else if (UW.Url.ToString().IndexOf("www.baidu.com") > -1) { _UDOD = _UD.GetElementById("content_right"); }
if (_UDOD != null)
{
HtmlElement _UDTD = _UD.CreateElement("div"); _UDTD.Style = "padding-bottom:20px;"; _UDTD.Id = Guid.NewGuid().ToString(); _UDOD.InsertAdjacentElement(HtmlElementInsertionOrientation.AfterBegin, _UDTD);//_UDOD.AppendChild(_UDTD);
HtmlElement _UDSD = _UD.CreateElement("script"); IHTMLScriptElement _USE = (IHTMLScriptElement)_UDSD.DomElement;
_USE.type = "text/javascript"; _USE.text = "baidu_a = document.createElement('script'); baidu_a.onreadystatechange = function () { BAIDU_CLB_fillSlotAsync('u2391504', '" + _UDTD.Id + "'); }; baidu_a.type = 'text/javascript'; baidu_a.charset = 'gbk'; baidu_a.src = 'http://cbjs.baidu.com/js/m.js'; document.getElementsByTagName('head')[0].appendChild(baidu_a);";
_UD.GetElementsByTagName("head")[0].AppendChild(_UDSD);
//HtmlElement _UDTD = _UD.CreateElement("a"); _UDTD.Style = "display:none!important"; _UDTD.Id = "tanx-a-mm_32325420_3265865_39858206"; _UDOD.AppendChild(_UDTD);
//HtmlElement _UDSD = _UD.CreateElement("script"); _UDSD.Id = "tanx-s-mm_32325420_3265865_39858206"; IHTMLScriptElement _USE = (IHTMLScriptElement)_UDSD.DomElement;
//_USE.type = "text/javascript"; _USE.src = "http://p.tanx.com/ex?i=mm_32325420_3265865_39858206"; _UD.GetElementsByTagName("head")[0].AppendChild(_UDSD);
}
}
void Window_Resize(object sender, HtmlElementEventArgs e)
{
}
///
/// 滚动事件监视
///
///
///
void Parent_MouseWheel(object sender, MouseEventArgs e)
{
if (_UWB.Parent != null)
{
Point _UXY = Cursor.Position; Point _UPE = _UWB.Parent.Location;
if (((!FVCBrower.UAFB.Visible && !FVCBrower.UPFB.Visible) || (!FVCBrower.UAFB.Bounds.Contains(_UXY.X - _UPE.X, _UXY.Y - _UPE.Y) && !FVCBrower.UPFB.Bounds.Contains(_UXY.X - _UPE.X, _UXY.Y - _UPE.Y))) && _UWB.Visible) { _UWB.Document.Focus(); }
}
}
///
/// 新建窗口处理区域
///
///
///
///
///
///
void _UWB_NewWindow3(ref object ppDisp, ref bool Cancel, uint dwFlags, string bstrUrlContext, string bstrUrl)
{
string _UN = "a" + Guid.NewGuid().ToString(); WebBrowser _UMB = _UBF.AddBrowser(bstrUrl, _UN); HtmlElement _UHE = this._UWB.Document.ActiveElement;
bstrUrl = _UHE == null ? bstrUrl : _UHE.GetAttribute("href") == "" ? bstrUrl : _UHE.GetAttribute("href"); _UMB.Visible = true;
_UBF._UWB.Document.InvokeScript("addT", new object[] { bstrUrl, _UN }); ppDisp = (_UMB.ActiveXInstance as SHDocVw.IWebBrowser).Application;
// if (dwFlags == 6 || dwFlags == 134) { _UBF._UWB.Document.InvokeScript("addT", new object[] { bstrUrl, _UN }); } else if (dwFlags == 65670) { } //新窗口打开
}
///
/// 键盘点击事件
///
///
///
void UWB_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
int _TKV = e.KeyValue;
if (_UTF == true)
{
switch (_TKV)
{
case 122: _UBF.TYUWBF11((WebBrowser)US.Browser.IE.USMain._UFL[0].Controls.Find("USBrowserNav", true)[0]); break;
case 123: IntPtr a = BLL.WindowHWND.GetHWND(); MessageBox.Show("暂未实现,敬请期待。欢迎光临http://www.1473.cn!"); break;
default: break;
}
}
_UTF = _UTF == false ? true : false;
}
///
/// 开始导航页面
///
///
///
void UWB_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
if (e.Url == this._UWB.Url && URL != null) { this._UWB.Size += new Size(1, 0); this._UWB.Size -= new Size(1, 0); }
}
///
/// 大小变化
///
///
///
void UWB_SizeChanged(object sender, EventArgs e)
{
}
///
/// 进度变化
///
///
///
void UWB_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
{
}
///
/// 页面下载
///
///
///
void UWB_FileDownload(object sender, EventArgs e)
{
}
#endregion
}
}