今天遇到一个问题,请各位高手多多指教! 小弟在实现 vc调用 WebBrowser控件里面的页面的javaScript函数,然后执行,发现了一个奇怪的问题,先贴代码,如下:
1)c++ 的代码
MSHTML::IHTMLDocument2Ptr spDoc(m_WebBrowser.GetDocument()); if (spDoc)
{
IDispatchPtr spDisp(spDoc->GetScript());
if (spDisp)
{
// Evaluate is the name of the script function.
OLECHAR FAR* szMember = L"TinyMCE::setContent";
DISPID dispid; HRESULT hr = spDisp->GetIDsOfNames(IID_NULL, &szMember, 1,
LOCALE_SYSTEM_DEFAULT, &dispid); if (SUCCEEDED(hr))
{
COleVariant vtResult;
static BYTE parms[] = VTS_BSTR; COleDispatchDriver dispDriver(spDisp, FALSE); dispDriver.InvokeHelper(dispid, DISPATCH_METHOD, VT_VARIANT,
(void*)&vtResult, parms,
"123456789");
}
}
}2)页面的javaScript代码a:这个页面包含了一个js文件,里面代码如下
function checksInput(key)
{
}b:这个页面还包含了另外一个js文件,先贴部分代码
function TinyMCE()
{
。
};
TinyMCE.prototype.setContent = function(html_content)
{
。
};
问题是这样的:
1)如果OLECHAR FAR* szMember = L"checksInput",c++的代码没有问题,可以正确执行javaScript函数。
2) 如果OLECHAR FAR* szMember = L"TinyMCE.prototype.setContent"或者"TinyMCE.setContent"或 者"TinyMCE::setContent",GetIDsOfNames都返回不了结果,像TinyMCE.prototype.setContent这样的函数,传入到GetIDsOfNames的时候应该写成什么样?需要变化吗?GetIDsOfNames只能够处理像
function fuction_name()
{
。。
}
的函数吗?
1)c++ 的代码
MSHTML::IHTMLDocument2Ptr spDoc(m_WebBrowser.GetDocument()); if (spDoc)
{
IDispatchPtr spDisp(spDoc->GetScript());
if (spDisp)
{
// Evaluate is the name of the script function.
OLECHAR FAR* szMember = L"TinyMCE::setContent";
DISPID dispid; HRESULT hr = spDisp->GetIDsOfNames(IID_NULL, &szMember, 1,
LOCALE_SYSTEM_DEFAULT, &dispid); if (SUCCEEDED(hr))
{
COleVariant vtResult;
static BYTE parms[] = VTS_BSTR; COleDispatchDriver dispDriver(spDisp, FALSE); dispDriver.InvokeHelper(dispid, DISPATCH_METHOD, VT_VARIANT,
(void*)&vtResult, parms,
"123456789");
}
}
}2)页面的javaScript代码a:这个页面包含了一个js文件,里面代码如下
function checksInput(key)
{
}b:这个页面还包含了另外一个js文件,先贴部分代码
function TinyMCE()
{
。
};
TinyMCE.prototype.setContent = function(html_content)
{
。
};
问题是这样的:
1)如果OLECHAR FAR* szMember = L"checksInput",c++的代码没有问题,可以正确执行javaScript函数。
2) 如果OLECHAR FAR* szMember = L"TinyMCE.prototype.setContent"或者"TinyMCE.setContent"或 者"TinyMCE::setContent",GetIDsOfNames都返回不了结果,像TinyMCE.prototype.setContent这样的函数,传入到GetIDsOfNames的时候应该写成什么样?需要变化吗?GetIDsOfNames只能够处理像
function fuction_name()
{
。。
}
的函数吗?
解决方案 »
- 为什么我做的软件被360报为安全性未知
- MFC怎样获取网页内容。
- vc dll 与asp交互问题
- 类成员访问的语法问题。
- 有关串口操作的问题,急!,调不出来,还请哪位高手指教!!
- 哪里有比较好的算法,把16位的BMP转换成256色的?
- 紧急求教?请问怎样统计一个vc程序总的代码的行数?
- 如何保存客户端POST过来的文件,任何文件~
- MFC TrackerRect类使用,高分!!
- 有没有可能做出这样的控件??急!!!在线等待!!!!!谁做出来我娶他!!!!!!!
- 点击菜单 “说明”,弹不出对话框“About”,怎么回事呀?
- 在dll程序中使用PostMessage,如何得到调用该dll的窗口句柄呢?
要想获取函数TinyMCE对象中的元素,必须先要获取TinyMCE对象的接口。
function TinyMCE()
{
。
};
TinyMCE.prototype.setContent = function(html_content)
{
。
};
函数 TinyMCE 是可以调用的,像prototype继承这样的就不行,不清楚该怎么操作,请各位大侠指点!
这个地址的代码只能够对常规的js函数有作用,对于含有类的js代码没有作用的
vc++访问javascript(2)--IDispatchEx是动态脚本语言的基础如何更自然的调用IDispatch接口的属性和方法,参见:
vb般的VC++开发(4)--调用IDispatch接口的属性和方法