TEmbeddedWB控件是Delphi中常用的浏览器控件,在Delphi7中,由于TEmbeddedWB所用IE内核比较旧,这就造成我们在浏览一些网页的时候,会弹出JavaScript错误提示框,这个行为会给用户带来不好的使用体验,很多时候我们都会想办法去掉这个提示框。
要去掉这个提示框,目前有两个可行的办法:
1. 升级TEmbeddedWB控件,但是高版本的TEmbeddedWB在D7中不一定能正常使用,可能需要修改较多的代码(注:这个办法作者并未试验过,在网上查资料时有网友提到这个方案)
2. 修改D7中TEmbeddedWB的控件源码,这个方法作者使用过,可行有效,下面是例子。
作者试验的TEmbeddedWB版本是1.16b,主要分两个步骤:
a . 修改TEmbeddedWB的Exec函数,大概在代码2000行处,
case nCmdID of
OLECMDID_SHOWSCRIPTERROR:
if Assigned(FOnScriptError)
then begin
//pEventObj := (Document as IHTMLDocument2).parentWindow.event;
pEventObj := GetEventObj(Document as IHTMLDocument2, 'error');
if pEventObj <> nil then
begin
FContinueScript := True;
FShowDialog := False; (将这个变量设为false,隐藏错误提示框)
FOnScriptError(self,
GetProperty('errorline'),
GetProperty('errorCharacter'),
GetProperty('errorCode'),
GetProperty('errorMessage'),
GetProperty('errorUrl'),
FContinueScript, FShowDialog);
TVariantArg(vaOut).vt := VT_BOOL;
TVariantArg(vaOut).vbool := FContinueScript;
if not FShowDialog then Result := S_OK;
end
b. 实现TEmbeddedWB.OnScriptError的回调函数,该函数内可以什么都不做,但必须确保TEmbeddedWB.OnScriptError被实现,如何实现?很简单,定义回调函数,将函数指针赋值给OnScriptError即可,回调函数的参数形式可以在TEmbeddedWB文件开始处找到