• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > activex如何激活网页的某一函数?

activex如何激活网页的某一函数?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了网页阻止activex,网页activex控件,此网页上的activex,在此网页上的activex,360网页阻止activex等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: activex 如何激活网页的某一函数?
描述:

本人做了一控件,首先弹出登陆对话框,对用户进行身份认证,合法之后,需从网页上传递一参数进来,运行其它部分,现在我不知道身份合法之后如何激活网页上传递参数的这一函数,请高手指教!


解决方案1:

或许因为第一次,所以觉得麻烦,自己亲自动手一下,感觉也不是很难:
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又该如何获得。
源程序不是很好,已经发送到你们邮箱,请查收。

解决方案2:

<script language=javascript for="activexid" event="onEvent1()">
    handler1()
</script>

解决方案3:

使用事件的优点是这个控件可用于IE以外的容器,例如Delphi写的容器。
所以我比较倾向于在控件中写个连接点,在JavaScript中指定event="onEvent1()。
牛兄的做法是直接找到IE的BROWSER对象指针,也就令该控件只能在IE中使用了。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ActiveX在网页中不能显示Dialog的问题
  • 嵌在网页里的ACTIVEX控件不能销毁的问题。
  • activex在网页中的问题
  • 哪里有开发用于嵌入网页的activex的教程?
  • Activex的网页中,如何做到分栏
  • 请教activex网页显示问题
  • 关于网页中的Activex控件的右键菜单问题
  • 关于activex网页调用的问题,急死了!!!!!!!!!!!!!!!!!!!!111
  • ActiveX控件可不可以用newActiveXObject方式在网页中创建
  • Activex控件事件无法通知网页?有谁知道为什么啊?

相关文章

  • 2017-06-05 拜求侯俊杰的《ActiveX控制组件彻底研究》译自《Activexcontrolinsideout》
  • 2017-06-05 创建OCX控件失败,请各位大侠帮帮忙了!
  • 2017-06-04 怎么用ATL消息机制在状态栏里面显示鼠标移动的X,Y值呀
  • 2017-06-04 VC编写的OCX如何结束,引用它的VB窗体
  • 2017-06-04 com开发工具
  • 2017-06-05 关于线程,本人初学。
  • 2017-06-04 mapxvc图层中画圆问题?
  • 2017-06-04 urgent!!!atoughtaskaboutconcurrentprogramminginVBDCOM
  • 2017-06-05 WaitForMultipleObjects的问题
  • 2017-06-04 创建com对象时为什么要用类厂?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 关于获得应用程序子窗口的句柄的问题?
    • vc60调用webservice真是头疼
    • vc如何调用c#写的dll?或者c#的dll该怎么写才能用vc调用
    • 关于开发矢量图软件
    • 关于类内线程访问成员变量的问题?
    • 如何在VS2008中引入tlb文件?
    • 各位大哥。请问一个问题。关于接口重载
    • CArchive如何传递结构体
    • 高手帮忙看看IDC_TEXTCHAT是什么控件?
    • hook卸载失败怎么办?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有