CDHtmlDialog 关于获取输入焦点的有关问题(TEXTAREA INPUT)
CDHtmlDialog 关于获取输入焦点的问题(TEXTAREA INPUT)
CDialogC 继承自CDHtmlDialog
CMainFrame::PreTranslateMessage
我在有字符键和数字键的地方 加入CDialogC 的判断函数查找当前页面是否有输入控件 input或textarea
有的话 就不拦截 把消息给CDialogC
现在的问题是我的主页面是在一个服务器A上 里面的一个子功能(页面)在服务器B上
这样就无法调用这个函数查找到输入控件input或textarea
如果这个2个是在一个服务器上就可以查找到input或textarea
请问如何处理这种跨域的问题呢!!!
------解决方案--------------------
- C/C++ code
BOOL CDialogC::GetNeedKeydown() { LPDISPATCH lpDisPatch = NULL; m_pBrowserApp->get_Document(&lpDisPatch); if( lpDisPatch == NULL ) return FALSE; IHTMLDocument2* pDoc = NULL; HRESULT hr = lpDisPatch->QueryInterface(IID_IHTMLDocument2, (void **)&pDoc); if (pDoc == NULL) return FALSE; return GetNeedKeydown(pDoc); } int CDialogC::GetNeedKeydown( IHTMLDocument2* pDoc ) { try { HRESULT hr = S_OK; IHTMLElement* pActiveElement = NULL; hr = pDoc->get_activeElement(&pActiveElement); if (!SUCCEEDED(hr) || pActiveElement == NULL) { pDoc->Release(); return FALSE; } BSTR bstrTagName = L""; CString strTagName = _T(""); pActiveElement->get_tagName(&bstrTagName); strTagName = bstrTagName; strTagName.MakeUpper(); CLog::WriteLog(strTagName.GetBuffer()); if (strTagName.Compare("FRAME") == 0 || strTagName.Compare("IFRAME") == 0) { IHTMLFramesCollection2* pFrameCollection = NULL; hr = pDoc->get_frames(&pFrameCollection); if (!SUCCEEDED(hr) || pFrameCollection == NULL) { pDoc->Release(); return FALSE; } pDoc->Release(); long lFrameCount = 0; hr = pFrameCollection->get_length(&lFrameCount); if (!SUCCEEDED(hr) || lFrameCount <= 0) { pFrameCollection->Release(); return FALSE; } for (long lFrameIndex = 0; lFrameIndex < lFrameCount; lFrameIndex++) { VARIANT vIndex; vIndex.vt = VT_I4; vIndex.lVal = lFrameIndex; VARIANT vResult; vResult.vt = VT_DISPATCH; hr = pFrameCollection->item(&vIndex, &vResult); if (!SUCCEEDED(hr)) continue; LPDISPATCH lpDispatch = (LPDISPATCH)vResult.ppdispVal; IHTMLWindow2* pWnd = NULL; hr = lpDispatch->QueryInterface(IID_IHTMLWindow2, (void **)&pWnd); if (!SUCCEEDED(hr) || pWnd == NULL) continue; IHTMLDocument2* pSubDoc = NULL; hr = pWnd->get_document(&pSubDoc); if (!SUCCEEDED(hr) || pSubDoc == NULL) { pWnd->Release(); continue; } if (GetNeedKeydown(pSubDoc)) { pWnd->Release(); return TRUE; } } pFrameCollection->Release(); } else if (strTagName.Compare("TEXTAREA") == 0) { pDoc->Release(); return TRUE; } else { IHTMLInputTextElement* pHTMLInputTextElement = NULL; hr = pActiveElement->QueryInterface(IID_IHTMLInputTextElement, (void **)&pHTMLInputTextElement); if (SUCCEEDED(hr) || pHTMLInputTextElement != NULL) { pDoc->Release(); return TRUE; } } pDoc->Release(); return FALSE; } catch (...) { CLog::WriteLog("GetNeedKeydown( IHTMLDocument2* pDoc )"); } return FALSE; }
CDialogC 继承自CDHtmlDialog
CMainFrame::PreTranslateMessage
我在有字符键和数字键的地方 加入CDialogC 的判断函数查找当前页面是否有输入控件 input或textarea
有的话 就不拦截 把消息给CDialogC
现在的问题是我的主页面是在一个服务器A上 里面的一个子功能(页面)在服务器B上
这样就无法调用这个函数查找到输入控件input或textarea
如果这个2个是在一个服务器上就可以查找到input或textarea
请问如何处理这种跨域的问题呢!!!
------解决方案--------------------