javascript - 我可以在 Spidermonkey 中执行 Javascript 函数并获取返回值吗?

标签 javascript delphi spidermonkey

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

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

最佳答案

> 使用 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);

关于javascript - 我可以在 Spidermonkey 中执行 Javascript 函数并获取返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12540713/

相关文章:

javascript - DOM 与 SpiderMonkey 一起使用?

javascript - 为什么 Firefox 运行这段代码的速度比 Chrome 快 10 倍

javascript - 哪种编程语言可以同时从网络上抓取数据并进行 api 调用?

javascript - 将鼠标悬停在 div jquery 上的文本更改不透明度

delphi - 通用列表和重复记录

c++ - 如何在 spidermonkey 嵌入中提供 js-ctypes?

javascript - 将 nodejs express 静态请求重定向到 https

javascript - 通过 Express 获取和传递图像时出现问题

delphi - 无法从 Indy TIdCookieManager 获取 cookie

delphi - 预构建事件在 Windows 7 中有效,在 XP 中失败