如何在没有TWebBrowser的Delphi程序中执行Javascript?
发布时间:2020-12-15 10:07:58 所属栏目:大数据 来源:网络整理
导读:我正在使用一个使用 Javascript接口发出请求的Web API,响应是通过回调Javascript函数.有没有办法从Delphi调用Javascript代码,而不使用TWebBrowser组件? 解决方法 您可以随时在Windows机器上运行cscript.exe. 优点: 自Windows 98以来,它可用于所有默认的Win
我正在使用一个使用
Javascript接口发出请求的Web API,响应是通过回调Javascript函数.有没有办法从Delphi调用Javascript代码,而不使用TWebBrowser组件?
解决方法
您可以随时在Windows机器上运行cscript.exe.
优点: >自Windows 98以来,它可用于所有默认的Windows安装. 缺点: >你会产生新的流程.在网络服务器上启动cscript.exe感觉错误.我不知道安全性是什么. 示例程序(这只是一个概念证明…可能有更好的方法来做到这一点): 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,false,CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS,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作为参数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |