社区
ATL
帖子详情
activex 如何激活网页的某一函数?
匪六哥
2003-11-14 02:01:59
本人做了一控件,首先弹出登陆对话框,对用户进行身份认证,合法之后,需从网页上传递一参数进来,运行其它部分,现在我不知道身份合法之后如何激活网页上传递参数的这一函数,请高手指教!
...全文
96
5
打赏
收藏
activex 如何激活网页的某一函数?
本人做了一控件,首先弹出登陆对话框,对用户进行身份认证,合法之后,需从网页上传递一参数进来,运行其它部分,现在我不知道身份合法之后如何激活网页上传递参数的这一函数,请高手指教!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
icelight
2003-12-25
打赏
举报
回复
使用事件的优点是这个控件可用于IE以外的容器,例如Delphi写的容器。
所以我比较倾向于在控件中写个连接点,在JavaScript中指定event="onEvent1()。
牛兄的做法是直接找到IE的BROWSER对象指针,也就令该控件只能在IE中使用了。
triout
2003-12-22
打赏
举报
回复
http://www.csdn.net/Develop/read_article.asp?id=22859
triout
2003-12-22
打赏
举报
回复
或许因为第一次,所以觉得麻烦,自己亲自动手一下,感觉也不是很难:
1——
给接口添加一个方法:
方法名:SetClientSite
参数:IOleClientSite* pClientSite
2——
给上面的方法加以实现(在相应的类中实现,已经自动生成了框架):
STDMETHODIMP CIrDav::SetClientSite(IOleClientSite * pClientSite)
{
// TODO: 在此添加实现代码
HRESULT hr = S_OK;
IServiceProvider *isp, *isp2 = NULL;
if (!pClientSite)
{
COMRELEASE(m_spBrowser);
}
else
{
try
{
hr = pClientSite->QueryInterface(IID_IServiceProvider, reinterpret_cast<void **>(&isp));
if (FAILED(hr))
throw("");
hr = isp->QueryService(SID_STopLevelBrowser, IID_IServiceProvider, reinterpret_cast<void **>(&isp2));
if (FAILED(hr))
throw("");
hr = isp2->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, reinterpret_cast<void **>(&m_spBrowser));
if (FAILED(hr))
throw("");
hr=this->m_spBrowser->get_Document((IDispatch**)&m_spDoc);
if(FAILED(hr))
throw("");
}
catch(LPCTSTR lpszErr)
{
if(CString(lpszErr)!="")
MessageBox(lpszErr);
hr=S_OK;
}
catch(...)
{
MessageBox("未知错误");
hr=S_OK;
}
COMRELEASE(isp);
COMRELEASE(isp2);
}
return hr;
}
通过这步的操作,我们就获得了控件所在Web页面的BROWSER对象指针和相应的DOCUMENT对象指针。
通过这些BROWSER和DOCUMENT对象指针,我们可以设置窗口的很多属性,比如菜单、全屏、工具栏等的显示和DOCUMENT的背景颜色等等。
这个方法参见MSDN:http://support.microsoft.com/support/kb/articles/Q257/7/17.ASP
3——
获得脚本,通过m_spDoc(DOCUMENT对象)的方法get_Script可以获得页面中的脚本对象:
CComPtr<IDispatch> pScript;
hr=this->m_spDoc->get_Script(&pScript);
4——
检索函数,使用上面脚本对象的GetIDsOfNames可以获取页面之中指定名的脚本函数的指针:
CComBSTR bstrMember("calert");
DISPID dispid;
hr=pScript->GetIDsOfNames(IID_NULL,&bstrMember,1,LOCALE_SYSTEM_DEFAULT,&dispid);
5——
调用脚本对象的Invoke方法执行脚本函数:
DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof dispparams);
dispparams.cArgs = 2;
dispparams.rgvarg = new VARIANT[dispparams.cArgs];
for( int i = 0; i < 2; i++)
{
CComBSTR bstr = "111"; // back reading
bstr.CopyTo(&dispparams.rgvarg[i].bstrVal);
dispparams.rgvarg[i].vt = VT_BSTR;
}
dispparams.cNamedArgs = 0;
EXCEPINFO excepInfo;
memset(&excepInfo, 0, sizeof excepInfo);
CComVariant vaResult;
UINT nArgErr = (UINT)-1; // initialize to invalid arg
hr = pScript->Invoke(dispid,IID_NULL,0,DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);
这里的执行中我随意的写了几个参数,可以根据自己需要修改。
本示例的触发:打开相应的HTM页面,点击发送按钮,按钮调用脚本函数btn,btn调用了COM中的函数KeyPress函数,在KeyPress函数中获取calert函数并调用。
注:一个问题:
获得BROWSER对象是在SetClientSite函数中实现,这个函数我了解不多,我想应该是系统自动运行的函数之一,但当我使用这个函数后,原先我在COM中定义的事件(比如CLICK事件)不能响应。有高手介绍说放置在别的地方,我想应该是可以的,比如找一个COM就绪的函数进行处理,但不知IOleClientSite*pClientSite又该如何获得。
源程序不是很好,已经发送到你们邮箱,请查收。
triout
2003-12-17
打赏
举报
回复
UP
conning333
2003-11-18
打赏
举报
回复
<script language=javascript for="activexid" event="onEvent1()">
handler1()
</script>
IE下自动
激活
ActiveX
控件
http://www.118cy.net/help_1420.html IE下自动
激活
ActiveX
控件
网页
编程 点击次数:849 用户不能与 APPLET、EMBED 或 OBJECT 元素加载的 Microsoft
ActiveX
控件直接交互。用户
激活
激活
ActiveX
控件
激活
ActiveX
控件发布日期: 2007-05-25 | 更新日期: 2007-05-25用户无法直接与 APPLET、EMBED 或 OBJECT 元素加载的 Microsoft
ActiveX
控件交互。 用户
激活
这些控件的用户界面后才可以与这些控件交互。 本主题介绍了 Microsoft Internet Explorer 如何处理
ActiveX
控件,显示如何加载 Acti
使用
ActiveX
控件开发
网页
常见的问题
1. 什么是
ActiveX
控件?Microsoft®
ActiveX
™ 控件是由软件提供商开发的可重用的软件组件。使用
ActiveX
控件,可以很快地在网址、台式应用程序、以及开发工具中加入特殊的功能。例如,StockTicker控件可以用来在
网页
上即时地加入活动信息,动画控件可用来向
网页
中加入动画特性。现在,已有1000多个商用的
ActiveX
控件,开发控件可以使用各种编程语言,如C,
Activex
感知
网页
关闭事件
概述IE直到控件第一次可见的时候才创建
ActiveX
控件,调用WM_CREATE的处理代码。在离开或者关闭页面的时候也没有调用WM_DESTORY的处理代码。在控件大小是0*0的时候也有同样的问题。如果你在这之前(例如window.onload事件的处理代码中)访问控件的窗口或者子窗口,那么不会成功。原因大多数
ActiveX
控件框架,例如MFC和ATL,在本地
激活
ActiveX
控件时创
ATL
3,248
社区成员
48,530
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章