5

我刚刚开始使用 Delphi 和 Spidermonkey。以前我会将网页加载到 TWebBrowser 组件中,并与加载的网页中的 Javascript 代码进行交互。这很麻烦,因为要将值返回给 delphi,我必须通过 Javascript 代码将它们加载到 DOM 对象中,然后从 Delphi 检查 DOM 以找到该对象并访问它的value属性。

使用 Spidermonkey,我可以执行特定的 Javascript 函数并轻松地直接将返回值返回到 Delphi 中吗?如果是这样,请向我指出一个有用的快速代码示例。Spidermonkey 附带的 3 个样本似乎并没有涉及到这一点。

4

2 回答 2

1

> 使用 Spidermonkey,我可以执行特定的 Javascript 函数并轻松地直接将返回值返回到 Delphi 中吗?

是的,有可能。与 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);
于 2013-12-17T15:14:39.363 回答
0

我对 delphi 一无所知,但听起来你会想要设置某种类型的 api 或路由以在前端/后端系统之间进行传输。

于 2013-05-22T20:17:46.210 回答