日期:2014-05-19  浏览次数:21015 次

[winform]AxWebBrowser如何捕捉javascript发出的事件
例如AxWebBrowser   浏览一个网页,网页上的关闭此页按钮(window.close),会弹   出一个确认对话框,如何在code部分捕捉用户点击的是哪一个?想在2个选择的事件都作自己的一个方法

例如
if(button   ==   "Yes "){
    OnClose();
}else{
    OnCloseNo();
}

------解决方案--------------------
捕获WindowsClosing事件自己显示一个确认对话框
------解决方案--------------------
不明白为什么不用.net自带的WebBrowser控件?
------解决方案--------------------
if(button == "Yes "){
CallClose();
}else{
CallCloseNo();
}

在网页的js脚本中写
function callClose()
{
window.external.CallUIClose
}

在程序中写
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IJsCall
{
void CallUIClose();
......
} // interface IJsCall
public class JsCallClass : IJsCall
{
private Form1 frm;

public JsCallClass(Form1 pfrm)
{
this.frm = pfrm;
}

#region IJsCall 成员

public void CallUIClose()
{
......
}
......
}

还有这一段
class test : IDocHostUIHandler
{
private PlayerMainForm frm;
public MarqueeUIHandler(PlayerMainForm pfrm)
{
this.frm = pfrm;
}

#region IDocHostUIHandler 成员
public void EnableModeless(int fEnable)
{
// TODO: 添加 MarqueeUIHandler.EnableModeless 实现
}

public void GetOptionKeyPath(out string pchKey, uint dw)
{
// TODO: 添加 MarqueeUIHandler.GetOptionKeyPath 实现
pchKey = null;
}

public void TranslateAccelerator(ref tagMSG lpmsg, ref Guid pguidCmdGroup, uint nCmdID)
{
// TODO: 添加 MarqueeUIHandler.TranslateAccelerator 实现
}

public void FilterDataObject(MsHtmHstInterop.IDataObject pDO, out MsHtmHstInterop.IDataObject ppDORet)
{
// TODO: 添加 MarqueeUIHandler.FilterDataObject 实现
ppDORet = null;
}

public void OnFrameWindowActivate(int fActivate)
{
// TODO: 添加 MarqueeUIHandler.OnFrameWindowActivate 实现
}

public void UpdateUI()
{
// TODO: 添加 MarqueeUIHandler.UpdateUI 实现
}

public void ShowContextMenu(uint dwID, ref MsHtmHstInterop.tagPOINT ppt, object pcmdtReserved, object pdispReserved)
{
// TODO: 添加 MarqueeUIHandler.ShowContextMenu 实现
}

public void TranslateUrl(uint dwTranslate, ref ushort pchURLIn, System.IntPtr ppchURLOut)
{
// TODO: 添加 MarqueeUIHandler.TranslateUrl 实现
}

public void ShowUI(uint dwID, IOleInPlaceActiveObject pActiveObject, IOleCommandTarget pCommandTarget, IOleInPlaceFrame pFrame, IOleInPlaceUIWindow pDoc)
{
// TODO: 添加 MarqueeUIHandler.ShowUI 实现
}

public void GetExternal(out object ppDispatch)
{
// TODO: 添加 MarqueeUIHandler.GetExternal 实现
ppDispatch = new JsCallClass(frm);
}

public void ResizeBorder(ref MsHtmHstInterop.tagRECT prcBorder, IOleInPlaceUIWindow pUIWindow, int fRameWindow)
{
// TODO: 添加 MarqueeUIHandler.ResizeBorder 实现
}

public void GetDropTarget(IDropTarget pDropTarget, out IDropTarget ppDropTarget)
{
// TODO: 添加 MarqueeUIHandler.GetDropTarget 实现
ppDropTarget = null;
}

public void GetHostInfo(ref _DOCHOSTUIINFO pInfo)
{
pInfo.dwFlags |= ( 0x08/*0x08