4

Put a TMemo, a TEmbeddedWB and a TButton on a Delphi VCL form.

This is the code from the form unit:

procedure TForm1.Button1Click(Sender: TObject);
var
  vResult: OleVariant;
  Para1: string;
begin
  Para1 := '5'; // edPara.Text;
  vResult := EmbeddedWB1.ExecScriptEx('evaluate', [Para1]);
  ShowMessage('Result from the Script: ' + IntToStr(vResult));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  EmbeddedWB1.HTMLCode.Assign(Memo1.Lines);
end;

This is the content of the Memo1.Lines:

<HTML> 
<HEAD> 
<TITLE>Test Script</TITLE> 
<SCRIPT> 
  function evaluate(x) { alert("Hello from the script evaluate(x)"); return eval(x * x); } 
</SCRIPT> 
</HEAD> 
<BODY> TEST Script: eval(x * x)</BODY> 
</HTML>

But it does not work: vResult is 0 after clicking the button.

Why it does not work?

0

1 Answer 1

3

The parameter type passed to ExecScriptEx must be an Integer in this case, not a string:

procedure TForm1.Button1Click(Sender: TObject);
var
  vResult: OleVariant;
  Para1: string;
  ParaInt: Integer;
begin
  //Para1 := '5'; // edPara.Text;
  ParaInt := 5;
  vResult := EmbeddedWB1.ExecScriptEx('evaluate', [ParaInt]);
  ShowMessage('Result from the Script: ' + IntToStr(vResult));
end;

Now it works!

Sign up to request clarification or add additional context in comments.

3 Comments

Interesting, because when directly using JavaScript, you are in fact able to pass and use either/or. Except I wonder if the reason is because '5' * '5' isn't valid...
@Jerry, yes, but you cannot multiply strings.
@TLama Yes, I just caught that. I was paying attention to the alert() before I noticed the return() calculation. I need to finish my coffee :-/

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.