2010-12-12 22 views

risposta

5

È sempre possibile eseguire cscript.exe su macchine Windows.

Vantaggi:

  1. E 'disponibile su tutte le finestre di default installa a partire da Windows 98.
  2. E' morto facile.
  3. Non sono necessari componenti Delphi di terze parti.
  4. Nessun dll + wrapper necessario, quindi l'implementazione è semplice.

Svantaggi:

  1. Sarete deposizione delle uova di nuovi processi. Avvio di cscript.exe su un server Web sembra sbagliato. Non sono sicuro di quali siano le implicazioni per la sicurezza.
  2. Non si dispone dell'accesso diretto ai componenti interni del motore di script.

Esempio di programma (è solo un proof-of-concept .. ci sono modi probabilmente migliori per fare questo):

program JsExample;  
{$APPTYPE CONSOLE} 

uses Windows, IoUtils; 

// start a new process 
function RunProgram(const aProg, aParams: string; aHow2Show: Word; const aWaitTime: dword): boolean; 
var LProcInfo: TProcessInformation; LStartUpInfo: TStartupInfo; 
begin 
    FillChar(LStartUpInfo, SizeOf(TStartupInfo), #0); FillChar(LProcInfo, SizeOf(TProcessInformation), #0); 
    with LStartUpInfo do 
    begin 
    cb := SizeOf(LStartUpInfo); 
    lpReserved := nil; lpDesktop := nil; lpTitle := nil; lpReserved2 := nil; cbReserved2 := 0; 
    dwFlags := STARTF_USESHOWWINDOW; 
    wShowWindow := aHow2Show; 
    end; 
    Result := CreateProcess(nil, PChar(aProg + ' ' + aParams), nil, nil, false, CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS, nil, nil, LStartUpInfo, LProcInfo); 
    if Result then 
    Result := WaitForSingleObject(LProcInfo.hProcess, aWaitTime) <> WAIT_FAILED; 
end; 

// run javascript code 
procedure RunJs(const aJavaScript: String); 
var LTmpFileName: String; 
begin 
    LTmpFileName := TPath.ChangeExtension(TPath.GetTempFileName, '.js'); 
    try 
    TFile.WriteAllText(LTmpFileName, aJavaScript); 
    RunProgram('cscript', '/NOLOGO "' + LTmpFileName + '"', SW_SHOWNORMAL, INFINITE); 
    finally 
    TFile.Delete(LTmpFileName); 
    end; 
end; 



// main 
begin 

    // execute some stupid javascript sample code 
    RunJs 
    (
    'var Text="Hello from JavaScript!";' + // creating a js variable 
    'for(var i=0;i<Text.length;i++)' +  // creating a js looop 
    ' WScript.Echo(Text.charAt(i));'  // calling string.charAt() and print some stuff 
); 

    ReadLn;  
end. 

Questo metodo è molto semplice .. Scrivi il JavaScript in un file, quindi chiama cscript.exe con il nome file come parametro.

2

Stai cercando un motore JavaScript? Ce ne sono alcuni sul mercato, come FastScript, e ho anche visto un wrapper Delphi per Windows Scripting Host (che ha il supporto JavaScript). Si noti, tuttavia, che se i propri script utilizzano classi e funzioni relative al web e al browser, nessun motore, tranne quello basato su browser, sarà in grado di offrirli.

4

SpiderMonkey

V8

Nessun indizio se tutto questo in realtà (ancora) funziona però.

Problemi correlati