मैं अनुरोध करने के लिए एक जावास्क्रिप्ट इंटरफ़ेस का उपयोग करता है कि एक वेब एपीआई के साथ काम कर रहा हूँ, और प्रतिक्रिया एक कॉलबैक जावास्क्रिप्ट समारोह के माध्यम से है। TWebBrowser
घटक का उपयोग किए बिना डेल्फी से जावास्क्रिप्ट कोड को कॉल करने का कोई तरीका है?मैं कैसे TWebBrowser बिना मेरे डेल्फी कार्यक्रम में जावास्क्रिप्ट निष्पादित कर सकते हैं?
उत्तर
तुम हमेशा खिड़कियां मशीनों पर cscript.exe चला सकते हैं।
लाभ:
- यह उपलब्ध है सभी डिफ़ॉल्ट खिड़कियों पर खिड़कियां 98.
- यह मृत आसान है के बाद से स्थापित करता है।
- कोई तृतीय-पक्ष डेल्फी घटकों की जरूरत है।
- कोई डीएलएल + रैपर की आवश्यकता नहीं है, इसलिए तैनाती सरल है।
नुकसान:
नई प्रक्रियाओं- आप को उत्पन्न करने दिया जाएगा। वेब सर्वर पर 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, 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 को कॉल करें।
आप एक JavaScript इंजन के लिए देख रहे हैं? बाजार में कुछ हैं, जैसे कि फास्टस्क्रिप्ट, और मैंने विंडोज स्क्रिप्टिंग होस्ट (जिसमें जावास्क्रिप्ट समर्थन है) के लिए डेल्फी रैपर भी देखा। नोट, हालांकि, यदि आपकी स्क्रिप्ट वेब- और ब्राउज़र से संबंधित वर्गों और कार्यों का उपयोग करती हैं, तो ब्राउज़र-आधारित एक को छोड़कर कोई इंजन उन्हें पेश करने में सक्षम नहीं होगा।
TWebBrowsercomponent का उपयोग किए बिना डेल्फी से जावास्क्रिप्ट कोड को कॉल करने का कोई तरीका है?
हाँ, दूसरी तरह के Spidermonkey (फ़ायर्फ़ॉक्स) के लिए जावास्क्रिप्ट आवरण जावास्क्रिप्ट इंजन का उपयोग करने के लिए।
http://code.google.com/p/delphi-javascript/
केवल 1 DLL आवश्यक है। XE2/XE4/XE5 के साथ संगत। X86 और x64 सिस्टम के लिए तैयार है।
उपयोगकर्ता नमूना: Can I execute a Javascript function inside Spidermonkey and get the return value?
- 1. डेल्फी TWebBrowser में जावास्क्रिप्ट, बंद थ्रेड
- 2. मैं कैसे तय कर सकते हैं कि कितना स्मृति मेरे कार्यक्रम वर्तमान में कब्जा है
- 3. मैं कैसे जांच कर सकते हैं (मेरे) वाक्य शुद्धता
- 4. मैं अपने डेल्फी कार्यक्रम में कमांड लाइन पैरामीटर कैसे पहचानूं?
- 5. हम कैसे जावास्क्रिप्ट फ़ंक्शन निष्पादित कर सकते हैं और हमारे एंड्रॉइड एप्लिकेशन में वापसी मूल्य प्राप्त कर सकते हैं?
- 6. मैं जावास्क्रिप्ट के साथ memcached कैसे उपयोग कर सकते हैं?
- 7. डेल्फी में जावास्क्रिप्ट को निष्पादित करने के लिए कैसे?
- 8. मैं TWebBrowser को त्रुटि के बाद जावास्क्रिप्ट को कैसे चला सकता हूं?
- 9. पढ़ें कार्यक्रम STDIN डेल्फी
- 10. डेल्फी स्वयं-हटाना कार्यक्रम
- 11. कार्यक्रम OpenCV नहीं चला सकते हैं, भले ही दूसरों कर सकते हैं
- 12. मैं कैसे पता कर सकते हैं
- 13. मैं कैसे परिभाषित कर सकते हैं एक्सेल
- 14. मैं कैसे परिवर्तित कर सकते हैं जावा
- 15. कैसे कर सकते हैं मैं MVC3
- 16. आप डेल्फी कार्यक्रम को कैसे साफ करते हैं?
- 17. कष्टप्रद क्लिक ध्वनि TWebbrowser
- 18. Programatic MVVM आदेश के पुनर्मूल्यांकन "निष्पादित कर सकते हैं" राज्य
- 19. मैं मेरे GCM आवेदन बादल (सूची उपकरण) में पंजीकृत डिवाइस पता कर सकते हैं कैसे
- 20. कैसे मैं एक ActionFilter में actionName प्राप्त कर सकते हैं
- 21. Capistrano मेजबान पर कार्य निष्पादित कर सकते हैं?
- 22. मैं डेटाबेस में संग्रहीत कोड कैसे निष्पादित कर सकता हूं?
- 23. मैं कैसे जांच कर सकते हैं कि सर्वर सोप अनुरोध
- 24. एचटीएमएल में <button> जावास्क्रिप्ट के बिना कुछ कर सकते हैं?
- 25. जावास्क्रिप्ट में क्रमशः बराबर टाइमआउट निष्पादित हैं?
- 26. पथ कैसे मैं इस कार्यक्रम
- 27. डेल्फी 7 में, मैं 'डिबग' और 'रिलीज' मोड सेट कर सकते हैं?
- 28. Django में, मैं एक sessionkey कैसे साफ़ कर सकते हैं?
- 29. मैं Node.js में jQuery.parseXML काम कैसे कर सकते हैं
- 30. मैं WebGL में एक वस्तु कैसे चेतन कर सकते हैं