VS2017_MFC的WebBrowser控制元件與網頁JavaScript互動的關鍵點記錄
阿新 • • 發佈:2019-04-30
https://www.cnblogs.com/MrYuan/p/5019220.html 這文章中講到: 使用IDispatch介面的GetIDsOfNames方法根據JS函式名獲取排程識別符號DISPID,使用Invoke來呼叫JS函式。
首先,C++把一個物件傳給JavaScript
這種瀏覽器, 沒法在JavaScript裡通過列舉取得函式名. 函式名是沒有事先定義的.
javaScript,可以呼叫任何名稱的函式, 算是一種請求,
寫法是obj["ArcadiaTest"](2828); 或obj.ArcadiaTest(2828);
每次JavaScript呼叫函式, 請會通過 CMFCApplicationWebDlg::GetIDsOfNames取得函式Id, 再請求CMFCApplicationWebDlg::Invoke用所取的Id呼叫C++功能
CMFCApplicationWebDlg我寫的這個類, 有繼承IDispatch 需要另外實現幾個虛擬函式:
// 繼承抽象函式: virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject); virtual ULONG STDMETHODCALLTYPE AddRef(); virtual ULONG STDMETHODCALLTYPE Release(); virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo); virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT* pctinfo);