2009-09-11 3 views
5

मैं Qt4 के वेबकिट पोर्ट/कार्यान्वयन का उपयोग करके एक साधारण लॉग व्यूअर लिखने की कोशिश कर रहा हूं। मेरे एचटीएमएल कोड इस तरह दिखता है:क्यूटी 4: क्यूटीवेबिट के माध्यम से सी ++ से किसी पृष्ठ में जावास्क्रिप्ट फ़ंक्शंस को कैसे कॉल करें?

http://pastie.org/613296

अधिक विशेष रूप से, मैं पता लगाने के लिए add_message() फ़ंक्शन जो मेरे सी ++ कोड से HTML दस्तावेज़ में <script> खंड में परिभाषित किया गया है कॉल करने के लिए कोशिश कर रहा हूँ।


// Doesn't work: 
QWebElement targetElement = chatView->page()->mainFrame()->findFirstElement("head").firstChild("script"); 

// Function is not included, either... 
qDebug() << targetElement.tagName() << targetElement.functions(); 

// The ultimate attempt in calling the function anyway: 
QVariant functionResult = targetElement.callFunction("add_message"); 

उत्तर

12

आप क्यूटी 4.5 का उपयोग कर रहे यह कर कुछ इस तरह हैं:

htmlView->page()->mainFrame()->evaluateJavaScript("add_message(); null"); 

नोट: स्क्रिप्ट के अंत में null प्रदर्शन जारी करने के लिए है। QWebFrame::evaluateJavaScript स्क्रिप्ट में अंतिम मान के साथ QVariant देता है। लिपि में अंतिम मूल्य का मूल्यांकन करना वास्तव में समय लेने वाला हो सकता है, इसलिए अंत में null डालने से यह तुरंत वापस आ जाता है।

+1

धन्यवाद, मैं घर आने पर तुरंत इसे आजमाउंगा। हालांकि ऐसा लगता है कि मुझे मूल्यांकन जावास्क्रिप्ट() कॉल में शाब्दिक के रूप में उपयोग करने के लिए तर्कों से बचना है। क्या यह खतरनाक या कुछ नहीं है? – BastiBen

+0

हां, आपको तर्क से बचना होगा, क्योंकि जावास्क्रिप्ट त्रुटियों को उत्पन्न करेगा। यह खतरनाक नहीं होना चाहिए, क्योंकि आप इसे केवल जावास्क्रिप्ट पार्सर से बचते हैं, वेबकिट के अंदर यह अनचाहे पैरामीटर के समान दिखाई देगा –

संबंधित मुद्दे

 संबंधित मुद्दे