Może, aby nie posługiwać się variant'ami, proponuję dopisać:
uses MSHTML;
A kod funkcji wygląda wtedy tak (działa - sprawdziłem):
function ExecuteScript(WebBrowser:TWebBrowser; Script: string; Language: string): Boolean;
var Window: IHTMLWindow2;
begin
result:=FALSE;
if Assigned(IHTMLDocument2(WebBrowser.Document)) then
begin
Window := IHTMLDocument2(WebBrowser.Document).ParentWindow;
if Assigned(Window) then
begin
try
Window.ExecScript(Script, Language);
result:=TRUE;
except
result:=FALSE;
end;
end;
end;
end;
Jeśli kod HTML/JS wygląda tak:
<html>
<body>
<script type="TEXT/JAVASCRIPT">
function test(a)
{
alert(a);
}
</script>
</body>
</html>
To wywołanie może wyglądać tak:
Caption:=BoolToStr(ExecuteScript(WebBrowser1, 'test(''Delphi'')', 'JavaScript'));