如何在没有TWebBrowser的Delphi程序中执行Javascript?

前端之家收集整理的这篇文章主要介绍了如何在没有TWebBrowser的Delphi程序中执行Javascript?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用一个使用 Javascript接口发出请求的Web API,响应是通过回调Javascript函数.有没有办法从Delphi调用Javascript代码,而不使用TWebBrowser组件?

解决方法

您可以随时在Windows机器上运行cscript.exe.

优点:

>自Windows 98以来,它可用于所有默认的Windows安装.
这是死的容易.
>不需要第三方Delphi组件.
>不需要dll的包装器,所以部署很简单.

缺点:

>你会产生新的流程.在网络服务器上启动cscript.exe感觉错误.我不知道安全性是什么.
>您无法直接访问脚本引擎的内部.

示例程序(这只是一个概念证明…可能有更好的方法来做到这一点):

  1. program JsExample;
  2. {$APPTYPE CONSOLE}
  3.  
  4. uses Windows,IoUtils;
  5.  
  6. // start a new process
  7. function RunProgram(const aProg,aParams: string; aHow2Show: Word; const aWaitTime: dword): boolean;
  8. var LProcInfo: TProcessInformation; LStartUpInfo: TStartupInfo;
  9. begin
  10. FillChar(LStartUpInfo,SizeOf(TStartupInfo),#0); FillChar(LProcInfo,SizeOf(TProcessInformation),#0);
  11. with LStartUpInfo do
  12. begin
  13. cb := SizeOf(LStartUpInfo);
  14. lpReserved := nil; lpDesktop := nil; lpTitle := nil; lpReserved2 := nil; cbReserved2 := 0;
  15. dwFlags := STARTF_USESHOWWINDOW;
  16. wShowWindow := aHow2Show;
  17. end;
  18. Result := CreateProcess(nil,PChar(aProg + ' ' + aParams),nil,false,CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS,LStartUpInfo,LProcInfo);
  19. if Result then
  20. Result := WaitForSingleObject(LProcInfo.hProcess,aWaitTime) <> WAIT_Failed;
  21. end;
  22.  
  23. // run javascript code
  24. procedure RunJs(const aJavaScript: String);
  25. var LTmpFileName: String;
  26. begin
  27. LTmpFileName := TPath.ChangeExtension(TPath.GetTempFileName,'.js');
  28. try
  29. TFile.WriteAllText(LTmpFileName,aJavaScript);
  30. RunProgram('cscript','/NOlogo "' + LTmpFileName + '"',SW_SHOWNORMAL,INFINITE);
  31. finally
  32. TFile.Delete(LTmpFileName);
  33. end;
  34. end;
  35.  
  36.  
  37.  
  38. // main
  39. begin
  40.  
  41. // execute some stupid javascript sample code
  42. RunJs
  43. (
  44. 'var Text="Hello from JavaScript!";' + // creating a js variable
  45. 'for(var i=0;i<Text.length;i++)' + // creating a js looop
  46. ' WScript.Echo(Text.charAt(i));' // calling string.charAt() and print some stuff
  47. );
  48.  
  49. ReadLn;
  50. end.

这个方法真的很简单..将JavaScript写入一个文件,然后调用cscript.exe作为参数.

猜你在找的Delphi相关文章