如何为webbrowser中弹出的模态网页对话框添加自动化方法?

supercllc 2011-11-22 10:01:38
我用CDHtmlDialog做基类,做了一个简单浏览器,通过以下几步,添加了自动化方法MyFunc


///////////////////////////////////////////
1、
类声明文件中添加
DECLARE_DISPATCH_MAP()

添加响应函数声明,如
void MyFunc(char* sURL);

重载CanAccessExternal
virtual BOOL CanAccessExternal();

2、
构造函数添加
EnableAutomation();

初始化添加
SetExternalDispatch(GetIDispatch(TRUE));

消息映射添加
BEGIN_DISPATCH_MAP(CDlgIE, CDHtmlDialog)
//弹出窗口接口
DISP_FUNCTION(CDlgIETooltip, "MyFunc", MyFunc, VT_EMPTY, VTS_BSTR)
// example:
// DISP_FUNCTION(CMyDHTMLDialog,"Func2",TestFunc,VT_BOOL,VTS_BSTR VTS_I4 VTS_I4)
// ^return, ^parameters type list
END_DISPATCH_MAP()

实现CanAccessExternal重载
BOOL CDlgIE::CanAccessExternal()
{
return TRUE;
}

最后实现响应函数MyFunc
////////////////////////////////////////////////////////////////////


这样,在网页中就可以使用external.MyFunc("参数")来调用我的浏览器提供的方法
现在问题是,如果网页中用showModalDialog弹出一个网页对话框,在网页对话框中就无法调用external.MyFunc方法
一种解决方案是将window在showModalDialog时传入,然后在对话框中调父页面的方法,但是我的页面有时是跨域的,无法取到父页面的window。
所以现在想最好能把网页对话框的webbrowser控件也加入我自定义的交互函数,想了很久,也找了很久,没有找到解决方案,想请各位帮帮忙,谢谢。
现在可以用hook得到网页对话框的窗口消息,但不知该如何给webbrowser加网页的消息映射
...全文
174 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
supercllc 2011-11-22
  • 打赏
  • 举报
回复
这样的话存在两个问题
一是虽然我hook到了,可是没有得到网页对话框要跳转的地址
二是网页对话框可能把一些参数,如父页面的window作为对象传入了,能操作父页面,而我的对话框做不到

额,刚引用错了
[Quote=引用 1 楼 oyljerry 的回复:]

Hook,把网页弹出的对话框也用你的对话框来显示,这样可以绑定》
[/Quote]
supercllc 2011-11-22
  • 打赏
  • 举报
回复
这样的话存在两个问题
一是虽然我hook到了,可是没有得到网页对话框要跳转的地址
二是网页对话框可能把一些参数,如父页面的window作为对象传入了,能操作父页面,而我的对话框做不到

[Quote=引用楼主 fatterbetter 的回复:]
我用CDHtmlDialog做基类,做了一个简单浏览器,通过以下几步,添加了自动化方法MyFunc

C/C++ code

///////////////////////////////////////////
1、
类声明文件中添加
DECLARE_DISPATCH_MAP()

添加响应函数声明,如
void MyFunc(char* sURL);

重载CanAccessExtern……
[/Quote]
oyljerry 2011-11-22
  • 打赏
  • 举报
回复
Hook,把网页弹出的对话框也用你的对话框来显示,这样可以绑定》
supercllc 2011-11-22
  • 打赏
  • 举报
回复
沉了,手工置顶,求解决

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧