调用函数代码和示例
 
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 首先 .h 文件中定义:
 
CComPtr<IHTMLWindow2> m_sphtmlWnd;
CComPtr<IHTMLDocument2> m_spHtmlDoc;
 
 
 
//方法1 可以取得返回值。。。。。
 
//调用方法示例:stringArray为传入参数列表,getSum为js函数,pVarResult 为返回值
 
/* CStringArray stringArray;
stringArray.RemoveAll();
stringArray.SetSize(5);
stringArray[0].Format(L"%d",m_poiStart.x);
stringArray[1].Format(L"%d",m_poiStart.y);
stringArray[2].Format(L"%d",m_poiEnd.x);
stringArray[3].Format(L"%d",m_poiEnd.y);
stringArray[4].Format(L"%d",a + 1);
CComVariant pVarResult = CallJScript(L"getSum", stringArray);*/
 
bool Cems_mysql_appView::GetJScript(CComPtr<IDispatch>& spDisp)
{
m_spHtmlDoc = (IHTMLDocument2*)(GetHtmlDocument());
if(m_spHtmlDoc == NULL)
{
return false;
}
HRESULT hr = m_spHtmlDoc->get_Script(&spDisp);
ATLASSERT(SUCCEEDED(hr));
return SUCCEEDED(hr);
}
 
CComVariant Cems_mysql_appView::CallJScript(const CString strFunc,const CStringArray& paramArray)
{
//Getting IDispatch for Java Script objects
CComPtr<IDispatch> spScript;
if(!GetJScript(spScript))
{
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))
{
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))
{
return false;
}
return vaResult;
}
 
 
 
//方法2
 
/*调用方法,不必多说。
 
CString str;
str.Format(L"getSum(%d,%d,%d,%d,%d)",m_poiStart.x,m_poiStart.y,m_poiEnd.x,m_poiEnd.y,a+1);
ExecScript(str);
 
*/
HRESULT Cems_mysql_appView::ExecScript(CString strjs)
{
HRESULT hr;
m_spHtmlDoc = (IHTMLDocument2*)(GetHtmlDocument());
if(m_sphtmlWnd == NULL)
{
hr = m_spHtmlDoc->get_parentWindow(&m_sphtmlWnd);//获取脚本指针
}
CComBSTR bstrjs = strjs.AllocSysString();
CComBSTR bstrlan = SysAllocString(L"javascript");
VARIANT varRet;
hr = m_sphtmlWnd->execScript(bstrjs, bstrlan, &varRet);
//m_sphtmlWnd = NULL;
return 1;
}
 

c&c++MFC 调用 js 函数代码的更多相关文章

  1. VC与JavaScript交互(二) --- 调用JS函数

    这一章,我们来动手实践VC调用JS函数. 我们动手写一个HTML,其中包含这样一段JS代码: //[html] <script type="text/javascript"& ...

  2. js,JavaScript,a标签onclick传递参数不对,A标签调用js函数写法总结

    错误示例: <a href="javascript:waterLineEdit(${goods.goods_id})" >修改 </a> <!-- 浏 ...

  3. 在动态THML语句中调用JS函数传递带空格参数的问题

    刚刚遇到一个问题,调用js函数的参数里带空格,造成调用失败的问题.   部分代码如下: html+="<div><a href=javascript:confirm(&qu ...

  4. form表单里的button调用js函数

    近来发现一个特别奇怪的问题:在form表单里,button的onclick事件无法调用js函数.代码如下(这段代码放在form标签里): dropUpdateAddress调用的js函数为: 这个时候 ...

  5. 使用正则表达式匹配JS函数代码

    使用正则表达式匹配JS函数代码 String someFunction="init"; Pattern regex = Pattern.compile("function ...

  6. Java中通过脚本引擎调用js函数

    import java.io.*; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.scri ...

  7. [模拟回调] demo1模拟用字符串调用js函数 demo2模拟springmvc controller回调页面js函数

    demo1. 模拟用字符串调用js 函数 function dataQuery() { var strFun = "testCallBack"; var strParam = &q ...

  8. 服务器控件调用JS函数

    是服务器端控件,不能在JS里直接调用,但可以在aspx.cs 里写方法可以调用JS函数,比如JS方法名称是check(), function check() {   alert(document.ge ...

  9. c++与js脚本交互,C++调用JS函数/JS调用C++函数

    <!DOCTYPE html> <html> <body> <h1>我的第一段 JavaScript</h1> <p> Java ...

随机推荐

  1. 逻辑右移函数 srl()与算术右移函数 sra() (转)

    比如一个有符号位的8位二进制数11001101,逻辑右移就不管符号位,如果移一位就变成01100110.算术右移要管符号位,右移一位变成10100110. 逻辑左移=算数左移,右边统一添0 逻辑右移, ...

  2. day04 mysql单表查询 多表查询 pymysql的使用

    day04 mysql pymysql   一.单表查询     1.having过滤         一般用作二次筛选             也可以用作一次筛选(残缺的: 只能筛选select里面 ...

  3. 使用Fiddler抓取手机包

    配置Fiddler 设置抓取HTTPS包 允许为外部连接 配置移动端 移动端需要能够连接到主机做代理, 设置移动端的网络, 端口为Fiddler的端口, 然后给移动端安装证书, 访问主机名+代理端口号 ...

  4. leetcood学习笔记-113-路径总和 II

    题目描述: 参考后的提交: class Solution(object): def pathSum(self, root, sum): """ :type root: T ...

  5. 获取Delphi焦点所在的控件及通过控件名称访问控件

    方法一: Var I: Integer; Begin For I := To ComponentCount - Do //获取组件数量 Begin If Components[I] Is TWinCo ...

  6. XML文件定义约束

    今天在做Android项目的时候,用到了XML解析,服务端返回的不是JSON,而是XML,这时候就需要我们解析XML了,当然在解析XML的时候,需要了XML文件的定义结构,任何一个文件的定义都是要遵循 ...

  7. NX二次开发-获取尺寸的附加文本UF_DRF_ask_appended_text

    #include <uf.h> #include <uf_drf.h> #include <uf_obj.h> #include <uf_part.h> ...

  8. 9.RabbitMQ Topic类型交换机

    RabbitMQ消息服务中Topic类型交换机根据通配符路由消息,*代表一个单词,#代表代表0或多个单词.   生产者 消费者   代码 Producer.java   package com.tes ...

  9. LeetCode刷题笔记-回溯法-分割回文串

    题目描述: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab"输出:[ ["aa", ...

  10. vue axios springBoot 跨域session丢失

    前端: 在引入axios的地方配置 axios.defaults.withCredentials=true,就可以允许跨域携带cookie信息了,这样每次发送ajax请求后,只要不关闭浏览器,得到的s ...