如何在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调用页面中的函数呢?最好能给个例子,多谢了。
...全文
77 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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,请再指点一下。
天限天空 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
  • 打赏
  • 举报
回复
有人知道吗?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧