Могу ли я выполнить функцию Javascript внутри Spidermonkey и получить возвращаемое значение?

Я только начинаю использовать Delphi со Spidermonkey. Ранее я загружал веб-страницу в компонент TWebBrowser и взаимодействовал с кодом Javascript на загруженной веб-странице. Это было грязно, потому что для возврата значений обратно в Delphi мне пришлось загрузить их в объект DOM через код Javascript, а затем проверить DOM из Delphi, чтобы найти этот объект и получить доступ к его свойству значения.

Могу ли я с помощью Spidermonkey выполнить определенную функцию Javascript и получить возвращаемое значение легко и непосредственно обратно в Delphi? Если это так, пожалуйста, укажите мне быстрый пример кода, который будет полезен. 3 образца, которые пришли с Spidermonkey, похоже, не входят в это.

2 ответа

> Могу ли я с помощью 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);

Я ничего не знаю о Delphi, но звучит так, как будто вы захотите настроить какой-либо тип API или маршруты для передачи между внешней и внутренней системами.

Другие вопросы по тегам