Sto lavorando con un'API Web che utilizza un'interfaccia Javascript per effettuare richieste e la risposta è tramite una funzione Javascript di callback. C'è un modo per chiamare il codice Javascript da Delphi senza utilizzare un componente TWebBrowser
?Come posso eseguire Javascript nel mio programma Delphi senza TWebBrowser?
risposta
È sempre possibile eseguire cscript.exe su macchine Windows.
Vantaggi:
- E 'disponibile su tutte le finestre di default installa a partire da Windows 98.
- E' morto facile.
- Non sono necessari componenti Delphi di terze parti.
- Nessun dll + wrapper necessario, quindi l'implementazione è semplice.
Svantaggi:
- 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.
- 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.
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.
C'è un modo per chiamare il codice JavaScript da Delphi senza utilizzare un TWebBrowsercomponent?
Sì, un altro modo per utilizzare il wrapper JavaScript per il motore javascript SpiderMonkey (FireFox).
http://code.google.com/p/delphi-javascript/
Richiesti solo 1 DLL. Compatibile con XE2/XE4/XE5. Pronto per i sistemi x86 e x64.
Usame campione: Can I execute a Javascript function inside Spidermonkey and get the return value?
- 1. Javascript in Delphi TWebBrowser, Thread di chiusura
- 2. Come posso disabilitare gli errori di javascript su "TWebbrowser"?
- 3. come eseguire javascript in delphi?
- 4. Strana eccezione 0x0eedfade nel programma multipla Delphi
- 5. Come posso trovare perdite di memoria nel mio programma Python?
- 6. Come posso eseguire il codice java che è stato incollato nel mio programma
- 7. Come riconoscere i parametri della riga di comando nel mio programma Delphi?
- 8. Come posso eseguire il mio script CGI perl senza apache?
- 9. Posso eseguire JavaScript nel codice Swift?
- 10. con framework dell'interfaccia utente jQuery in TWebBrowser in Delphi
- 11. Funzione callback Delphi da TWebBrowser con javascript su Delphi XE6 per tutte le piattaforme (incluso iOS, ANDROID)?
- 12. Perché la memoria del mio programma Delphi continua a crescere?
- 13. Come sapere se OpenMP funziona nel mio programma C++
- 14. Come posso eseguire SASS senza installare?
- 15. Come posso creare un menu nel menu di avvio del mio programma?
- 16. Come disabilitare il pulsante di ingrandimento nel programma delphi?
- 17. Esegui programma antivirus utilizzando delphi
- 18. Come mettere il mio javascript nel footer
- 19. vim - eseguire: comandi nel mio .bashrc
- 20. Eseguire javascript senza UIWebView possibile?
- 21. Chrome/Firefox Alternativa al controllo TWebBrowser
- 22. Eseguire un semplice calcolo nel programma NANT
- 23. Come forzare il caricamento di una pagina nel controllo Twebbrowser quando questo non è visibile
- 24. come accedere ai contatti nel mio programma Android
- 25. Fastidioso click del suono in TWebBrowser
- 26. Come abilitare il core dump nel mio programma Linux C++
- 27. Come posso eseguire un programma Java nell'editor di Atom?
- 28. Come posso eseguire un programma py2exe in Windows senza il terminale?
- 29. Come eseguire il programma Java nel prompt dei comandi
- 30. Uso "da __future__ import division" nel mio programma, ma non è caricato con il mio programma