TEmbeddedWB.ExecScriptEx无法与JavaScript一起使用。

4
在Delphi VCL表单上放置一个TMemo、一个TEmbeddedWB和一个TButton
以下是表单单元中的代码:
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;

这是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>

但是它没有起作用:点击按钮后vResult的值为0。

为什么它不起作用?

1个回答

3

ExecScriptEx 方法中传递的参数类型必须是 Integer,而不是 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;

现在它能工作了!

有趣的是,当直接使用JavaScript时,实际上可以传递和使用任一一个。只是我想知道原因是否是因为 '5' * '5' 不是有效的... - Jerry Dodge
@Jerry,是的,但你不能将字符串相乘。 - TLama
1
@TLama 是的,我刚刚注意到了。在注意到 return() 计算之前,我一直在关注 alert()。我需要喝完咖啡 :-/ - Jerry Dodge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接