微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在使用一个使用 Javascript接口发出请求的Web API,响应是通过回调Javascript函数.有没有办法从Delphi调用Javascript代码,而不使用TWebbrowser组件?

解决方法

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

优点:

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

缺点:

>你会产生新的流程.在网络服务器上启动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作为参数.

原文地址:https://www.jb51.cc/delphi/102762.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐