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

supercllc 2011-11-24 10:36:46
我用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加网页的消息映射

原贴在http://topic.csdn.net/u/20111122/10/3efbdc7f-b0d4-4a65-8a26-9b6e64b8f319.html
上一次沉了,再发贴问
...全文
249 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
supercllc 2011-12-01
  • 打赏
  • 举报
回复
怎么没人回复了啊,随便结帖了
supercllc 2011-11-24
  • 打赏
  • 举报
回复
这种方法有局限性,我在帖子中提到过,
“一种解决方案是将window在showModalDialog时传入,然后在对话框中调父页面的方法,但是我的页面有时是跨域的,无法取到父页面的window。”

在我们的系统中有好几个子系统,不在同一个域,经常弹出的网页是另一个域的页面,这时弹出的网页对话框无法操作父页面

[Quote=引用 1 楼 chenjintaoxp 的回复:]

你把要在网页对话框中的设置信息传给父窗口,然父窗口去调自己的函数MyFunc,不就行了!
[/Quote]
请叫我涛哥0-0 2011-11-24
  • 打赏
  • 举报
回复
你把要在网页对话框中的设置信息传给父窗口,然父窗口去调自己的函数MyFunc,不就行了!

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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