const
DISPID_AMBIENT_USERAGENT = -5513;
type
TWebBrowser = class (SHDocVw.TWebbrowser, IDispatch)
private
FUserAgent: string;
procedure SetUserAgent (const Value: string);
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HRESULT; stdcall;
public
property UserAgent: string read FUserAgent write SetUserAgent;
constructor Create(AOwner: TComponent); override;
end;
constructor TWebBrowser.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FUserAgent:='';
end;
function TWebBrowser.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HRESULT;
begin
//check if the DISPID_AMBIENT_USERAGENT flag is being processed and if the User Agent to set is not empty
if (FUserAgent <> '') and (Flags and DISPATCH_PROPERTYGET <> 0) and Assigned(VarResult) and (DispId=DISPID_AMBIENT_USERAGENT) then
begin
//set the user agent
POleVariant(VarResult)^:= FUserAgent+#13#10;
Result := S_OK; //return S_OK
end
else
Result := inherited Invoke(DispID, IID, LocaleID, Flags, Params, VarResult, ExcepInfo, ArgErr); //call the default Invoke method
end;
procedure TWebBrowser.SetUserAgent(const Value: string);
var
Control: IOleControl;
begin
FUserAgent := Value;
//the current interface supports IOleControl?
if DefaultInterface.QueryInterface(IOleControl, Control) = 0 then
Control.OnAmbientPropertyChange(DISPID_AMBIENT_USERAGENT); //call the OnAmbientPropertyChange event
end;
WebBrowser1.UserAgent:='Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3';
WebBrowser1.Navigate(EditURL.Text);