5

Spidermonkey で Delphi を使い始めたところです。以前は、Web ページを TWebBrowser コンポーネントにロードし、ロードした Web ページで Javascript コードを操作していました。Delphi に値を返すには、Javascript コードを介して値を DOM オブジェクトにロードし、Delphi から DOM を検査してそのオブジェクトを見つけ、そのプロパティにアクセスする必要があったため、これは面倒でした。

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 に答える