网页使用JavaScript与Active空间进行交互
2011-05-23 09:45
344 查看
JavaScript调用ActiveX控件中的函数
这个交互的关键是在接口类中添加对外的方法。大概步骤如下:
1. 在.NET在新建一个MFC ActiveX工程
2. 在类视图中,可以看到最下面有一个“工程名+Lib”项,图标与上面的类图标不同,展开它,可以看到三项,下面要做的就是在第二项(名为“_D+工程名”)下添加对外函数
3. 展开第二项后可以看到下面已经有了一个AboutBox(void)函数,这就是说些ActiveX控件已经有了一个对外交互的接口。对着接口(名为“_D+工程名”)点右键选“添加->添加方法”,写入函数名和参数,返回类型(内部名称可以和外面名称不一样)。
4. 添加完成后,可以在类视图中的“C+工程名+Ctrl”类下面看到刚刚添加的函数(这里显示的是上面提到的内部名称),双击该函数就可以写自己的代码了。
上面的步骤就添加ActiveX控件对外的一个函数,在网页中可以在JavaScript函数中去调用该函数,调用方法就是运行“控件ID.函数名 (参数)”,这里的控件ID指在网页中为ActiveX指定的ID,如<object id=”控件ID” classid=…></object>。函数名是指在上面第3步中的外部名称。
如下图所示:定义了三个方法Login,MessageBox,Test2
值得注意的是,如果想把JavaScript字符串当作参数传递到控件里,那么MFC的参数应该为BSTR类型
这个交互的关键是在接口类中添加对外的方法。大概步骤如下:
1. 在.NET在新建一个MFC ActiveX工程
2. 在类视图中,可以看到最下面有一个“工程名+Lib”项,图标与上面的类图标不同,展开它,可以看到三项,下面要做的就是在第二项(名为“_D+工程名”)下添加对外函数
3. 展开第二项后可以看到下面已经有了一个AboutBox(void)函数,这就是说些ActiveX控件已经有了一个对外交互的接口。对着接口(名为“_D+工程名”)点右键选“添加->添加方法”,写入函数名和参数,返回类型(内部名称可以和外面名称不一样)。
4. 添加完成后,可以在类视图中的“C+工程名+Ctrl”类下面看到刚刚添加的函数(这里显示的是上面提到的内部名称),双击该函数就可以写自己的代码了。
上面的步骤就添加ActiveX控件对外的一个函数,在网页中可以在JavaScript函数中去调用该函数,调用方法就是运行“控件ID.函数名 (参数)”,这里的控件ID指在网页中为ActiveX指定的ID,如<object id=”控件ID” classid=…></object>。函数名是指在上面第3步中的外部名称。
如下图所示:定义了三个方法Login,MessageBox,Test2
值得注意的是,如果想把JavaScript字符串当作参数传递到控件里,那么MFC的参数应该为BSTR类型
――ActiveX控件调用网页JavaScript中的函数 上一篇文章中提到了怎样在MFC的ActiveX控件中添加一个对外的函数,在JavaScript中可以调用,但这只是一方面的交互,本篇文档将介绍怎样在ActiveX控件中调用网页中的JavaScript函数。 在网上搜索许久,终于找到了一个简单易用的方法,这里先要给出来源代码的网址http://www.codeproject.com/com/JSCalls.asp。 这是一个例子,可以调用网页中的JavaScript函数,但还不是我们想要的,它需要通过网页的源代码来初始化,而我们用.NET开发MFC的 ActiveX控件时无法得到运行时网页的源代码,所以要通过其它方法来初始化。在狂GOOGLE和MSDN后,找到了怎样在MFC中得到 IHTMLDocument2对象(具体是什么对象我也不是很清楚,但这个对象中存放了客户端网页里的很多信息)。另一方面,简单修改了上面网址中提供的 类源代码,就可以运行了。 下面是具体的步骤: 1. 从http://www.codeproject.com/com/JSCalls.asp下载源代码(选择“download source”,你也可以下载示例去看一下,另就是下载需要免费注册)。下载解压后可以看到两个文件:WebPage.cpp、WebPage.h。我们打开WebPage.cpp修改其中 bool CWebPage::SetDocument(IDispatch* pDisp)函数,将其改为下面的代码: bool CWebPage::SetDocument(IHTMLDocument2* spDoc) { m_spDoc = NULL; HRESULT hr = spDoc->QueryInterface(IID_IHTMLDocument2,(void**)&m_spDoc); if(FAILED(hr)) { ShowError("Failed to get HTML document COM object"); return false; } return true; } 当然把这个函数修改完成后记得去修改WebPage.h的函数声明。 2. 将修改完的两个文 件拷贝到ActiveX控件工程的文件夹下,并在ActiveX控件工程添加这两个文件,这时工程的类视图中就会出现一个新类CWebPage。这里给出 添加的详细过程,对着.NET中解决方案管理中的“源代码”点右键选择“添加->添加现有项”,然后选择WebPage.cpp。同样,把 WebPage.h添加到头文件里。 3. 做完上面的步骤,我们就可以使用CWebPage类了。在要调用网页JavaScript函数的地方用下面的代码,其中的jsFunc就是网页中的JavaScript函数。 IOleClientSite *site; site = COleControl::GetClientSite(); CComPtr < IOleContainer > spContainer; site->GetContainer( &spContainer ); CComQIPtr < IHTMLDocument2 > spDoc = spContainer; CWebPage web; web.SetDocument2(spDoc); web.CallJScript("jsFunc"); 所有步骤都已经列出,可以轻松的在ActiveX中调用网页中的JavaScript函数。当然,你们可以自己再去看看CWebPage类的成员函数,里面有得到JavaScript函数列表、调用需要参数的JavaScript函数等等。 |
相关文章推荐
- 网页使用JavaScript与Active空间进行交互
- JS与Objective-C交互(网页与原生交互---使用JavaScriptCore)
- 使用WebViewJavascriptBridge进行iOS与H5交互
- 使用 JavascriptCore 与 UIWebView 进行交互拦截Html5的方法
- ArcGIS API for JavaScript 4.2学习笔记[22] 使用【QueryTask类】进行空间查询 / 弹窗样式
- iOS与H5交互 H5与App原生交互,一般会是前端页面中的JavaScript与App使用的原生开发语言的交互。技术方案应能达到以下要求: 在js与原生进行交互的时候能保证正常的正向调用逻辑返回
- JS Collection--javascript 集合类( 在使用Comet来进行数据交互时根据网上的资源写了几个集合类。自我感觉还比较好用,呵呵! )
- 使用javascript对网页的部分内容进行打印
- 如何使用proc文件系统让用户空间和内核空间进行交互
- C# WinForm 和 javascript进行交互 使用HTML做界面
- Android WebView使用以及与JavaScript进行交互实例
- 使用javascript对网页的部分内容进行打印
- 使用Javascript直接将网页进行简繁转换[转]
- 前端自动化测试工具--使用karma进行javascript单元测试(转)
- SERVLET与JSP Jsp中使用xmlhttp进行数据交互
- 使用XML与远程服务器进行交互
- 直接使用默认设置进行打印:(1)使用IE浏览器时利用ScriptX打印网页
- Android 和 IOS 使用 jsBridge 进行交互方法
- [Andriod官方训练教程]使用Fragment创建一个动态的UI之与其他Fragments进行交互