Can I execute a Javascript function inside Spidermonkey and get the return value?

北战南征 提交于 2019-12-07 05:25:45

问题


I'm just getting into using Delphi with Spidermonkey. Previously I would load a web page into a TWebBrowser component and interact with the Javascript code in the loaded web page. This was messy because to return values back to delphi I had to load them into a DOM object via the Javascript code and then inspect the DOM from Delphi to find that object and access it's value property.

With Spidermonkey, can I execute a specific Javascript function and get the return value easily and directly back into Delphi? If so, please point me to a quick code example that would be helpful. The 3 samples that came with Spidermonkey don't seem to get into this.


回答1:


> With Spidermonkey, can I execute a specific Javascript function and get the return value easily and directly back into Delphi?

Yes, it possible. Sample compatible with Delphi XE2/XE4.

var
    recFunction,
    recReturnValue,
    recJSVar        : jsval;

........

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
//-=- Find entry point to function.
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

if JS_LookupProperty (TSMJSEngine.Context, TSMJSEngine.Global.JSObject, PAnsiChar (AnsiString (strFunctionToRun)), @recFunction) <> js_true then
begin
    //-=- Everything very bad :)
end;

if recFunction.asPtr = nil then
begin
    //-=- Everything very bad :)
end;

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
//-=- Call function 
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

if JS_CallFunctionValue (TSMJSEngine.Context, TSMJSEngine.Global.JSObject, recFunction, 0, nil, @recReturnValue) = Integer (false) then
begin
    //-=- Everything very bad :)
end;

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
//-=- Get returning result (type: string).
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

strResult := JSValToString (TSMJSEngine.Context, recReturnValue);



回答2:


I know nothing about delphi but it sounds like you are going to want to setup some type of api or routes for transferring between a frontend / backend system.



来源:https://stackoverflow.com/questions/12540713/can-i-execute-a-javascript-function-inside-spidermonkey-and-get-the-return-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!