<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Greetings all,<div><br></div><div>I am working on a project that needs scripting and I've decided to make use of Fabrice Bellard's awesome QuickJS library. I am considering making it nice to use for the rest of the Free Pascal user community by implementing an interesting way of integrating Javascript that would make its usage as easy as possible.<br><br>Before I do so however, I wanted to get some feedback on how this would work to gauge if it would be of interest to fellow Free Pascal users. Here is how it would work. All feedback would be appreciated.</div><div><br></div><div>Javascript:</div><div><br></div><div><font face="monospace">let data = { name: "James", age: 25 };</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">function update(name) {</font></div><div><font face="monospace">  <a href="http://data.name">data.name</a> = name;</font></div><div><font face="monospace">}</font></div><div><font face="monospace"><br></font></div><div><div><font face="monospace">function verify(note) {</font></div><div><font face="monospace">  console.log("received note " + note);</font></div><div><font face="monospace">  console.log("data name is " + <a href="http://data.name">data.name</a>);</font></div><div><font face="monospace">  hello(data, " message from javascript");</font></div><div><font face="monospace">  console.log("table size is " + table.size[0] + " by " + table.size[1]);</font></div><div><font face="monospace">}</font></div><div><br></div></div><div>Pascal:</div><div><br></div><div><font face="monospace">function JavascriptCallback(Script: IScript; Args: TScriptValues): TScriptValue;</font></div><div><font face="monospace">begin</font></div><div><font face="monospace">  WriteLn(Args[0].age, Args[1]);</font></div><div><font face="monospace">  // writes 25 message from javascript</font></div><div><font face="monospace">  Result := Nothing;</font></div><div><font face="monospace">end;</font></div><div><font face="monospace"><br></font></div><div><div><font face="monospace">var</font></div><div><font face="monospace">  TestScript: IJavascript;</font></div></div><div><font face="monospace"><br></font></div><div><font face="monospace">procedure LoadScript;</font></div><div><font face="monospace">begin</font></div><div><font face="monospace">   Script := NewScript(MyScriptText);</font></div><div><font face="monospace">   Script.Global.table.size := [15, 6];</font></div><div><font face="monospace">   // { table: { size: [15, 6] } } is now available to javascript</font></div><div><font face="monospace">   Script.Global.hello := Script.DefineCallback(JavascriptCallback);</font></div><div><font face="monospace">end;</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">procedure CallScript;</font></div><div><font face="monospace">begin</font></div><div><font face="monospace">  // Call the javascript verify method passing it a note</font></div><div><font face="monospace">  Script.Global.verify("a note from pascal");</font></div><div><font face="monospace">  // verify will call back out JavascriptCallback function</font></div><div><font face="monospace">  Script.Global.update("Ralph");</font></div><div><font face="monospace">end;</font></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>