2011. 8. 17. 05:08
WebBrowser 응용 프로그램에서 스크립트 함수 호출
2011. 8. 17. 05:08 in 3. Implementation/Internet Explorer
출처: http://support.microsoft.com/kb/q185127/
웹 페이지에 포함된 스크립트 함수를 호출하려면 IDispatch를 사용해야 합니다. 웹 페이지에 포함된 스크립트 함수를 Visual C++ 응용 프로그램에서 호출하려면 아래 단계를 수행합니다.
아래는 evaluate 함수를 포함하는 웹 페이지의 HTML입니다.
웹 페이지에 포함된 스크립트 함수를 호출하려면 IDispatch를 사용해야 합니다. 웹 페이지에 포함된 스크립트 함수를 Visual C++ 응용 프로그램에서 호출하려면 아래 단계를 수행합니다.
- HTML 문서의 IDispatch를 구합니다.
- IDispatch::GetIDsOfNames를 호출하여 스크립트 함수의 ID를 구합니다.
- IDispatch::Invoke를 호출하여 함수를 실행합니다.
#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); dispDriver.InvokeHelper(dispid, DISPATCH_METHOD, VT_VARIANT, (void*)&vtResult, parms, "5+Math.sin(9)"); } } } }
아래는 evaluate 함수를 포함하는 웹 페이지의 HTML입니다.
<HTML> <HEAD> <TITLE>Evaluate</TITLE> <SCRIPT> function evaluate(x) { alert("hello") return eval(x) } </SCRIPT> </HEAD> <BODY> </BODY> </HTML>