void CMiniMule::_OnBeforeNavigate2(LPDISPATCH pDisp, VARIANT* URL, VARIANT* /*Flags*/, VARIANT* /*TargetFrameName*/, VARIANT* /*PostData*/, VARIANT* /*Headers*/, BOOL* Cancel) { ASSERT( GetCurrentThreadId() == _uMainThreadId ); CString strURL(V_BSTR(URL)); TRACE(_T("%hs: %s\n"), __FUNCTION__, strURL); // No external links allowed! TCHAR szScheme[INTERNET_MAX_SCHEME_LENGTH]; URL_COMPONENTS Url = {0}; Url.dwStructSize = sizeof(Url); Url.lpszScheme = szScheme; Url.dwSchemeLength = ARRSIZE(szScheme); if (InternetCrackUrl(strURL, 0, 0, &Url) && Url.dwSchemeLength) { if (Url.nScheme != INTERNET_SCHEME_UNKNOWN // <absolute local file path> && Url.nScheme != INTERNET_SCHEME_RES // res://... && Url.nScheme != INTERNET_SCHEME_FILE) // file://... { *Cancel = TRUE; return; } } OnBeforeNavigate(pDisp, strURL); }
void CHTMLContainerDlg::_OnBeforeNavigate2(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel) { CString targetURL(V_BSTR(URL)); __time64_t now; _time64(&now); if (max(now, m_backspaceTime) - min(now, m_backspaceTime) <= 1) *Cancel = TRUE; // if (m_lastURL.CompareNoCase(targetURL) == 0) // { // *Cancel = TRUE; // } // else // { // m_lastURL = m_curURL; // m_curURL = targetURL; // } OnBeforeNavigate(pDisp, targetURL); }