Могу ли я выполнить функцию 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 или маршруты для передачи между внешней и внутренней системами.