Hallo,
(Post nochmal komplett überarbeitet
Ich habe mal eine
Unit erstellt mit der man Javascript-Funktionen aufrufen kann.
Man kann sogar Delphi-Funktionen als Callback mitgeben:
Delphi-Quellcode:
uses
RemoteJS;
type
// Funktionen die man als Callback übergeben will müssen von TJavascriptFunction abgeleitet werden
TAddFunc = class(TJavascriptFunction)
function Call(AParams: Array of OleVariant): OleVariant; override;
end;
function TAddFunc.Call(AParams: array of OleVariant): OleVariant;
begin
if (Length(AParams) >= 2) then
Result := AParams[0] + AParams[1]
else
Result := Unassigned;
end;
procedure TForm1.Button1Click(Sender: TObject);
var f: IDispatch;
begin
doc := WebBrowser1.Document as IHTMLDocument2;
// Aufruf einer Funktion in JS, Ergebnis wird in res gespeichert und ausgegeben
res := InvokeJS(doc.Script, 'ScriptAdd(a,b)', [2.4, 3.8]);
ShowMessage(res);
// Aufruf der Funktion CallbackAdd.
// Als parameter wird unsere AddFunc übergeben die aus CallbackAdd heraus aufgerufen wird
f:= TAddFunc.Create();
res := InvokeJS(doc.Script, 'CallbackAdd(f)', [f]);
end;
Die dazugehörige Beispiel-
HTML:
Code:
<
html>
<head>
<script>
function ScriptAdd(a,b) {
return a+b;
}
function CallbackAdd(f) {
alert(f(12, 1)); // sollte 13 ausgeben
}
</script>
</head>
<body>
</body>
</
html>
Damit sollte der Kommunikation zwischen JS und Delphi eigentlich nichts mehr im Wege stehen
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."