Пример, приведенный Jeroen, верен, за исключением того, что это не C ++, и я подумал, что вы можете найти пример на языке, который вы используете, полезным. Компонент TCppWebBrowser аналогичен компоненту TWebBrowser и имеет те же события. (Однако, когда вы пытаетесь получить доступ к некоторым внутренним элементам, все становится сложнее.)
Вот отредактированная версия метода OnBeforeNavigate2, который я использую:
void __fastcall TMyForm::CppWebBrowserBeforeNavigate2(TObject* /*Sender*/,
LPDISPATCH /*pDisp*/, Variant* URL, Variant* /*Flags*/, Variant* /*TargetFrameName*/,
Variant* /*PostData*/, Variant* /*Headers*/, VARIANT_BOOL *Cancel)
{
UnicodeString strURL(URL->operator UnicodeString());
if (strURL != m_strWebPage && strURL != L"about:blank") { // if navigating somewhere else, ie the user clicked a link
*Cancel = true;
if ((int)::ShellExecute(NULL, L"open", strURL.c_str(), NULL, NULL, SW_SHOWNORMAL) <= 32) {
MyMessageBox(L"There was an error opening the link '" + strURL + L"'.");
}
}
}
Отменяет навигацию в веб-браузере, кроме about:blank
(вы можете удалить этот бит, если это не разрешенная для вашего контроля страница) и URL-адрес m_strWebPage
, который я хочу заблокировать. Вы можете сделать эту проверку более гибкой, позволяя, например, перемещаться в любом месте определенного домена, но открывать ссылки на другой домен в другом окне, например.
Код также написан для C ++ Builder 2009/2010 из-за его использования UnicodeString
и строкового префикса L
. Вы не говорите, какую версию вы используете, но если вы используете 2007 или ранее, вместо этого приведете к WideString
.
Приветствия
David