c++调用javascript的问题
我要再浏览器中加一个http服务插件,假定使用8080端口,程序发送soap包到8080 的时候,这个服务接受数据并放到当前的浏览器里,并调用调用页面中的 javascript使用soap包中的数据。
现在遇到很郁闷的问题,总是找不到javascript函数的id。
我在类里重载了SetClientSite(IOleClientSite *pClientSite)
得到pClientSite指针,
做如下处理:
STDMETHODIMP ChttpKeeper::SetClientSite(IOleClientSite *pClientSite)
{
// TODO: Add your implementation code here
IOleObjectImpl<ChttpKeeper>::SetClientSite(pClientSite);
if(!loaded)
{
loaded=1;
HRESULT hr = S_OK;
pClientSite->GetContainer(&spIE);
//CComQIPtr<IHTMLDocument2,&IID_IHTMLDocument2> spDoc;
spDoc=spIE;
}
return S_OK;
}
其中spDoc这样声明:
CComQIPtr<IHTMLDocument2,&IID_IHTMLDocument2> spDoc;
我在这个函数里似乎得到了指向DOM树的指针
然后再update函数里这么写:
bool ChttpKeeper::update(const char* date)
{
HRESULT hr = S_OK;
CComPtr<IDispatch> pScript;
hr = spDoc->get_Script(&pScript);
DISPID dispid;
CComBSTR bstrMember("testcom");
//CComBSTR bstrMember("test1");
hr=pScript->GetIDsOfNames(IID_NULL,&bstrMember,1,LOCALE_USER_DEFAULT, &dispid);
return 1;
}
testcom是javascript函数,我无法通过GetIDsOfNames找到这个函数id。
但是却可以通过GetIDsOfNames这一步可以找到test1的id,test1是一个table
html代码这么写的:
<HTML>
<HEAD>
<TITLE>ATL 3.0 test page for object httpKeeper</TITLE>
</HEAD>
<BODY>
<OBJECT ID="httpKeeper" CLASSID="CLSID:92CE5A72-A500-454B-80D4-5823E53351C2"></OBJECT>
<table id="test1">
</table>
</BODY>
<script LANGUAGE="JavaScript">
function testcom()
{
alert("nothing");
}
</script>
</HTML>
附件里有完整代码。
我也参考了这3个例子:也没有结果
http://www.pconline.com.cn/pcedu/empolder/gj/vc/0312/259928.html
http://support.microsoft.com/kb/318426
http://www.codeproject.com/com/jscalls.asp
其中第3个例子可以执行,但他使用了mfc的函数
HtmlView::GetHtmlDocument()来获得一个CComPtr<IDispatch> spDisp
我不能使用mfc,也没找到能够替代这个函数的东东。