如何在activeX(vc)中调用页面上的javascript函数?

gutsyu 2004-05-08 04:45:10
在我的activeX中
#import "msscript.ocx"
pScriptControl->Language = "JScript";
pScriptControl->AllowUI = TRUE;
pScriptControl->AddCode("function MyStringFunction(Argu1,Argu2,Argu3) { return \"hi there\" ;}" );
_variant_t outpar = pScriptControl->Run("MyStringFunction", &psa);

这样调用是可以成功的,
但是调用一个页面中的javascript就会发生致命错误,比如:
_variant_t outpar = pScriptControl->Run("MyStringFunction2", &psa);
页面中:
<script language="JavaScript">
function MyStringFunction2(a1,a2,a3)
{
alert("ok");
}
</script>

怎样才能用ScriptControl调用页面中的函数呢?最好能给个例子,多谢了。
...全文
49 8 点赞 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
IFoo 2004-05-09
IObjectWithSite::SetSite

IE会调用你的控件的这个方法,并传入他的iunknonw指针,应该可以通过queryinterface查询到ihtmldocument2接口
  • 打赏
  • 举报
回复
gutsyu 2004-05-09
何为连接点?
  • 打赏
  • 举报
回复
wangweixing2000 2004-05-09
怎么不用连接点?
  • 打赏
  • 举报
回复
gutsyu 2004-05-09
非常感谢CallScript部分的sourcecode,但是我没做过sink browser,不知如何得到IHTMLDocument2,请再指点一下。
  • 打赏
  • 举报
回复
newkey007 2004-05-09
1.先 sink browser, 得到 IHTMLDocument2

2. STDMETHODIMP CScriptBridge::CallScript(IDispatch *pDispDoc, BSTR bstrFunc, IXMLDOMNode *pXMLArg)
{
HRESULT hResult = E_FAIL;

IDispatch *pDispScript = NULL;
IDispatch *pDispArg = NULL;

CComQIPtr<IHTMLDocument2> pHtmlDoc = pDispDoc;

hResult = pHtmlDoc->get_Script(&pDispScript);
CComBSTR bstrHtml;
IHTMLElement *pEle;
pHtmlDoc->get_body(&pEle);
pEle->get_outerHTML(&bstrHtml);

if (SUCCEEDED(hResult) && pDispScript)
{
DISPID dispid;
// LOCALE_USER_DEFAULT
OLECHAR *pszFunct = L"UpdateUI";
hResult = pDispScript->GetIDsOfNames(IID_NULL, &pszFunct, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if (S_OK != hResult)
{
pDispScript->Release();
return hResult;
}

EXCEPINFO excepInfo;
DISPPARAMS dispparams;
memset(&dispparams, 0, sizeof dispparams);
dispparams.cArgs = 1;
dispparams.rgvarg = new VARIANT[1];
dispparams.cNamedArgs = 0;
dispparams.rgvarg[0].vt = VT_DISPATCH;
dispparams.rgvarg[0].pdispVal = pXMLArg;
VARIANT varResult;
UINT nArgErr = (UINT)-1; // initialize to invalid arg
hResult = pDispScript->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT,
DISPATCH_METHOD,
&dispparams, &varResult, &excepInfo, &nArgErr);

delete[] dispparams.rgvarg;

}

return hResult;
}
  • 打赏
  • 举报
回复
gutsyu 2004-05-09
有没有大虾指点一下
  • 打赏
  • 举报
回复
蒋晟 2004-05-09
if u use MFC,u can use macros to sink DHTML events.
a sample is available at http://www.csdn.net/develop/read_article.asp?id=21702
  • 打赏
  • 举报
回复
gutsyu 2004-05-08
有人知道吗?
  • 打赏
  • 举报
回复
相关推荐
发帖
ATL
加入

3220

社区成员

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
申请成为版主
帖子事件
创建了帖子
2004-05-08 04:45
社区公告
暂无公告