VS2017_MFC的WebBrowser控件與網頁JavaScript交互的關鍵點記錄

https://www.cnblogs.com/MrYuan/p/5019220.html 這文章中講到: 使用IDispatch接口的GetIDsOfNames方法根據JS函數名獲取調度標識符DISPID,使用Invoke來調用JS函數。html


首先,C++把一個對象傳給JavaScript 這種瀏覽器, 無法在JavaScript裏經過枚舉取得函數名. 函數名是沒有事先定義的. javaScript,能夠調用任何名稱的函數, 算是一種請求, 寫法是obj["ArcadiaTest"](2828); 或obj.ArcadiaTest(2828);java

每次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);

實例工程備份: https://pan.baidu.com/s/1UuzZcdGCH9TacMbOfOvg-A dtttspa

相關文章
相關標籤/搜索