2010-12-12 43 views

回答

5

您可以隨時在Windows機器上運行cscript.exe。

優點:

  1. 它是適用於所有默認的Windows自Windows 98
  2. 它的死很容易安裝。
  3. 沒有第三方的Delphi組件需要。
  4. 沒有DLL的包裝需要,所以部署很簡單。

缺點:

  1. 你會產生新的進程。在Web服務器上啓動cscript.exe會感覺不對。我不確定安全含義是什麼。
  2. 您無法直接訪問腳本引擎的內部。

示例程序(它只是一個證明的概念。有可能是更好的方式來做到這一點):

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. 

這個方法很簡單..編寫JavaScript到一個文件,然後用文件名作爲參數調用cscript.exe。

2

你正在尋找一個JavaScript引擎?市場上有一些例如FastScript,我還看到了Windows腳本宿主的Delphi包裝器(它支持JavaScript)。但是,請注意,如果您的腳本使用與網絡和瀏覽器相關的類和函數,則除基於瀏覽器的引擎之外,任何引擎都不能提供它們。

4

SpiderMonkey

V8

如果任何這實際上(仍然)的作品,雖然沒有頭緒。

相關問題