मैं वेब पेज प्रदर्शित करने के लिए क्यूटी वेबइंजिन फ्रेमवर्क का उपयोग कर रहा हूं। जब मैं लोड करता हूं तो मैं जावास्क्रिप्ट को किसी पृष्ठ में इंजेक्शन दे रहा हूं, और जावास्क्रिप्ट को क्यूटी ऑब्जेक्ट तक पहुंचने में सक्षम होना चाहता हूं। जाहिर है, ऐसा करने के लिए एक QWebChannel मौजूद होना चाहिए जो क्रोमियम (जावास्क्रिप्ट) और मेरे बाकी सी ++/क्यूटी परियोजना के बीच कुछ आईपीसी स्थापित करता है। मैं QWebEnginePage :: setWebChannel (QWebChannel * चैनल) फ़ंक्शन में आया, हालांकि मुझे इसके उपयोग के कोई उदाहरण नहीं मिल रहे हैं। प्रलेखन (http://doc.qt.io/qt-5/qwebenginepage.html#setWebChannel) का उल्लेख है कि qt.webChannelTransport जावास्क्रिप्ट संदर्भ में उपलब्ध होना चाहिए, लेकिन मुझे नहीं पता कि qwebchannel.js (https://github.com/qtproject/qtwebchannel/blob/dev/src/webchannel/qwebchannel.js) में यह कहां स्थापित है। मैंने WebChannel उदाहरणों को देखा है (http://doc.qt.io/qt-5/qtwebchannel-examples.html) और यदि संभव हो तो वेबसाकेट से बचना चाहेंगे।क्यूटी QWebEnginePage :: setWebChannel() परिवहन ऑब्जेक्ट
नीचे मैंने वेब चैनल को कार्यान्वित करने का प्रयास किया है।
जब भी कोई पृष्ठ लोड मैं एक चैनल स्थापित करने और C++ जावास्क्रिप्ट इंजेक्षन:
QWebChannel *channel = new QWebChannel();
channel->registerObject(QStringLiteral("jshelper"), helper);
view->page()->runJavaScript(qwebjs); //this is qwebchannel.js
view->page()->setWebChannel(channel);
view->page()->runJavaScript(myfunction); //function that calls QT object (jshelper)
जावास्क्रिप्ट में:
new QWebChannel(qt.webChannelTransport, function(channel) { ... });
कौन सा नहीं ठीक से जोड़ा जा रहा चैनल में परिणाम (यह मानते हुए कि यह qt.webChannelTransport की वजह से है, क्योंकि जब मैं WebSockets का उपयोग कर रहा था तब यह काम कर रहा था)। QWebChannel के उदाहरणों के लिए कोई संकेतक QWebEnginePage के साथ स्थापित किए जा रहे हैं इस तरह भी सराहना की जाती है।
यह बहुत अच्छा है - मेरी एकमात्र समस्या यह है कि मुझे स्क्रिप्ट को इंजेक्ट करना होगा क्योंकि मेरे पास लोड होने वाले पृष्ठों पर कोई नियंत्रण नहीं है। साथ ही, जब आप "नया क्यूटी 5.5" कहते हैं, तो क्या आप देव शाखा से हैं? मैं क्यूटी निर्माता 5.5.0 का उपयोग कर रहा हूं और मुझे यकीन नहीं है कि क्यूटी स्रोत कोड को कैसे अपडेट किया गया है जो मैं काम कर रहा हूं। मैंने कंसोल में जेएस डीबग करने के लिए पर्यावरण परिवर्तनीय सेटिंग की कोशिश की लेकिन यह काम नहीं कर रहा है (मुझे लगता है क्योंकि यह डीबग विकल्प हालिया प्रतिबद्धता से है)। – mathieujofis
मैं देखता हूं। क्यूटी निर्माता में, टूल्स> विकल्प> बिल्ड और रन> क्यूटी संस्करणों पर जाएं और जांचें कि आपके पास कौन सा संस्करण है। जब मैं क्यूटी 5.5 कहता हूं, मेरा मतलब है [स्थिर संस्करण जो इस साल 1 जुलाई को जारी किया गया था] (http://blog.qt.io/blog/2015/07/01/qt-5-5-released/) । क्यूटी 5.5 ने QWebChannel पर क्रोमियम आईपीसी के लिए अंतर्निहित समर्थन जोड़ा (यानी, 'QWebEnginePage :: setWebChannel() 'और' qt.webChannelTransport' जेएस में)। साथ ही, आपका क्यूटी निर्माता v5.5 पर नहीं हो सकता है, [नवीनतम संस्करण v3.4.2 है) (http://blog.qt.io/blog/2015/07/01/qt-creator-3-4-2- जारी /) :) –
इसके अलावा, QTWEBENGINE_REMOTE_DEBUGGING' Qt 5.5 रिलीज़ में मौजूद है: http://stackoverflow.com/a/29721197/504611 –