1. 程式人生 > >VS2017_MFC的WebBrowser控制元件與網頁JavaScript互動的關鍵點記錄

VS2017_MFC的WebBrowser控制元件與網頁JavaScript互動的關鍵點記錄

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

例項工程備份: https://pan.baidu.com/s/1UuzZcdGCH9