IOleCommandTarget
ve IOleCommandTarget.Exec
yöntemini kullanarak OLECMDID_SHOWSCRIPTERROR
komutunu yakalayabilirsiniz.
Aşağıdaki örnekte, araya girilen sınıfı kullandım, böylece bu kodu ünitenize koyarsanız, yalnızca bu formdaki veya bu ünitede oluşturulan bu web tarayıcıları dinamik olarak bu davranışı alacaklardır.
uses
SHDocVw, ActiveX;
type
TWebBrowser = class(SHDocVw.TWebBrowser, IOleCommandTarget)
private
function QueryStatus(CmdGroup: PGUID; cCmds: Cardinal; prgCmds: POleCmd;
CmdText: POleCmdText): HRESULT; stdcall;
function Exec(CmdGroup: PGUID; nCmdID, nCmdexecopt: DWORD;
const vaIn: OleVariant; var vaOut: OleVariant): HRESULT; stdcall;
end;
implementation
function TWebBrowser.QueryStatus(CmdGroup: PGUID; cCmds: Cardinal;
prgCmds: POleCmd; CmdText: POleCmdText): HRESULT; stdcall;
begin
Result := S_OK;
end;
function TWebBrowser.Exec(CmdGroup: PGUID; nCmdID, nCmdexecopt: DWORD;
const vaIn: OleVariant; var vaOut: OleVariant): HRESULT; stdcall;
begin
// presume that all commands can be executed; for list of available commands
// see SHDocVw.pas unit, using this event you can suppress or create custom
// events for more than just script error dialogs, there are commands like
// undo, redo, refresh, open, save, print etc. etc.
// be careful, because not all command results are meaningful, like the one
// with script error message boxes, I would expect that if you return S_OK,
// the error dialog will be displayed, but it's vice-versa
Result := S_OK;
// there's a script error in the currently executed script, so
if nCmdID = OLECMDID_SHOWSCRIPTERROR then
begin
// if you return S_FALSE, the script error dialog is shown
Result := S_FALSE;
// if you return S_OK, the script error dialog is suppressed
Result := S_OK;
end;
end;
Bu yöntem ayrıca tüm javascript açılır pencereleri de kaldırır. – TipTop
Bu şekilde davranan örnek bir sayfanız var mı? Bu [http://support.microsoft.com/kb/261003] makalesine bakın. Açılır pencereden önce hata olmadığından emin misiniz? IMHO sadece hataları bastırmak gerekir, ama ben bir göz atabiliriz ... – TLama
@TipTop, genel olarak, kod, JavaScript çalıştırılan popup'lar ile ilgisi yoktur. Kodla ilgili bir sorun yaşarsanız, varsayılan sonuç değerinin S_OK olmamalı, OLECMDERR_E_NOTSUPPORTED olması gerektiğini düşünüyorum. – stanleyxu2005