从C调用JavaScript函数代码。
来源:互联网 发布:淘宝买高压气瓶犯法吗 编辑:程序博客网 时间:2024/06/10 21:24
有时候,当我们正在使用的C内的IE浏览器控制+ +应用程序,我们需要访问HTML元素。我们可以通过使用诸如IWebBrowser2,IHTMLDocument2标准的COM对象它,等等。这样,我们很容易可以实现如点击按钮,单击定位,获得输入的字符串,获取HTML文本功能,等等。不幸的是,微软并没有提供类似的JavaScript对象。在任何情况下,它可以通过使用传统的COM方式为HTML页内的JavaScript对象的控制。本文介绍的类CWebPage,允许您做一个技术,从C调用JavaScript函数+ +代码。
由于使用的结果所提出的类,它很容易从C调用任何JavaScript函数+ +代码。要实现此功能,我们应该得到的指针IHTMLDocument2接口。如果我们使用的是从MFC的CHtmlView类,我们可以通过使用一个成员函数CHtmlView::GetHtmlDocument()。在使用IWebBrowser或IWebBrowser2组件的情况下,功能get_Document将使我们想要的界面。下面是一个例子:
CComPtr<IDispatch> spDisp = CHtmlView::GetHtmlDocument();m_webPage.SetDocument(spDisp);
The rest of the things will be done by the CWebPage
class. Here is an example of a JavaScript call without parameters.
m_webPage.CallJScript("Welcome");
The example of the JavaScript call with two parameters will look like this:
m_webPage.CallJScript("Miltiply","2.34","3.32");
The Class Implementation
class CWebPage{public: CWebPage(); virtual ~CWebPage(); bool SetDocument(IDispatch* pDisp); LPDISPATCH GetHtmlDocument() const; const CString GetLastError() const; bool GetJScript(CComPtr<IDispatch>& spDisp); bool GetJScripts(CComPtr<IHTMLElementCollection>& spColl); CString ScanJScript(CString& strAText,CStringArray& args); bool CallJScript(const CString strFunc); bool CallJScript(const CString strFunc,const CString strArg1); bool CallJScript(const CString strFunc,const CString strArg1, const CString strArg2); bool CallJScript(const CString strFunc,const CString strArg1, const CString strArg2,const CString strArg3); bool CallJScript(const CString strFunc,const CStringArray& paramArray);protected CComPtr<IHTMLDocument2> m_spDoc;};调用技术在前面提到的技术拆分以下步骤:获取一个指向IHTMLDocument2接口。
获取一个在HTML文件中的JavaScript对象的IDispatch。使用了一个JavaScript函数名字的DISPID。把参数给DISPPARAM结构。调用JavaScript的使用IDispatch接口的Invoke方法的功能。下面是一个得到一个IDispatch指针的Java脚本对象的例子:
bool CWebPage::GetJScript(CComPtr<IDispatch>& spDisp){ HRESULT hr = m_spDoc->get_Script(&spDisp); ATLASSERT(SUCCEEDED(hr)); return SUCCEEDED(hr);}
And here is the final function to call JavaScript:
CComVariant CWebPage::CallJScript(const CString strFunc, const CStringArray& paramArray){ //Getting IDispatch for Java Script objects CComPtr<IDispatch> spScript; if(!GetJScript(spScript)) { ShowError("Cannot GetScript"); return false; } //Find dispid for given function in the object CComBSTR bstrMember(strFunc); DISPID dispid = NULL; HRESULT hr = spScript->GetIDsOfNames(IID_NULL,&bstrMember,1, LOCALE_SYSTEM_DEFAULT,&dispid); if(FAILED(hr)) { ShowError(GetSystemErrorMessage(hr)); return false; } const int arraySize = paramArray.GetSize(); //Putting parameters DISPPARAMS dispparams; memset(&dispparams, 0, sizeof dispparams); dispparams.cArgs = arraySize; dispparams.rgvarg = new VARIANT[dispparams.cArgs]; dispparams.cNamedArgs = 0; for( int i = 0; i < arraySize; i++) { CComBSTR> bstr = paramArray.GetAt(arraySize - 1 - i); // back reading bstr.CopyTo(&dispparams.rgvarg[i].bstrVal); dispparams.rgvarg[i].vt = VT_BSTR; } EXCEPINFO excepInfo; memset(&excepInfo, 0, sizeof excepInfo); CComVariant vaResult; UINT nArgErr = (UINT)-1; // initialize to invalid arg //Call JavaScript function hr = spScript->Invoke(dispid,IID_NULL,0, DISPATCH_METHOD,&dispparams, &vaResult,&excepInfo,&nArgErr); delete [] dispparams.rgvarg; if(FAILED(hr)) { ShowError(GetSystemErrorMessage(hr)); return false; } return vaResult;}
http://www.codeguru.com/Cpp/I-N/ieprogram/article.php/c4399
转自:http://blog.csdn.net/jacklhf/article/details/4631698
- 从C调用JavaScript函数代码。
- 从C调用JavaScript函数代码。
- 从lua调用C函数
- C/C++与汇编语言的交互之-(2)从C/C++代码调用汇编代码中的函数与变量
- 从 C/C++ 程序调用 Java 代码
- 从 Java 程序调用 C/C++ 代码
- 从 C/C++ 程序调用 Java 代码 .
- 从 C/C++ 程序调用 Java 代码
- 从 C/C++ 程序调用 Java 代码
- 从 C/C++ 程序调用 Java 代码
- 从 C/C++ 程序调用 Java 代码
- c/c++/MFC 调用 js 函数代码
- c/c++/MFC 调用 js 函数代码
- c/c++/MFC 调用 js 函数代码
- 从汇编看c语言函数调用
- 从汇编看c语言函数调用
- 代码疑云(2)-c函数调用约定
- 代码疑云(2)-c函数调用约定
- Android Application package 'AndroidManifest.xml' must have a minimum of 2 segments.
- http://blog.csdn.net/dm_vincent/article/details/7655764
- 程序员生存定律-选公司前要干的事:分类
- jquery中each用法
- 基于链表的C语言堆内存检测
- 从C调用JavaScript函数代码。
- 检测本机是否登录了指定QQ账号
- 15.1 Reverse Integer
- ZOJ 3203 Light Bulb 三分\推公式
- 如何用django开发一个简易个人Blog
- Windows下使用CodeBlock或控制台操作遇到问题
- jquery选择器之属性过滤选择器
- SGU 525Revolutionary Roads (Tarjan+Dfs)
- HDOJ 题目2306 改革春风吹满地(数学 几何)