最关键一点是,要在web控件的OnDocumentComplete里ExecuteScriptFunction。。。其他地方都不保证能拿
到。。。
http://support.microsoft.com/kb/185127/zh-cn
#import "C:/winnt/system32/mshtml.tlb" // location of mshtml.tlb
void CMyClass::ExecuteScriptFunction()
{
// m_WebBrowser is an instance of IWebBrowser2
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"evaluate";
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,
"5+Math.sin(9)");
}
}
}
}
<HTML>
<HEAD>
<TITLE>Evaluate</TITLE>
<SCRIPT>
function evaluate(x)
{
alert("hello")
return eval(x)
}
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
经测试,这个js的func可以放在任意.js里