2016-04-20 3 views
5

में उपलब्ध नहीं है मेरे पास एक क्यूटी एप्लिकेशन है जो QWebChannel का उपयोग करके वेबव्यू लॉन्च करता है।जावास्क्रिप्ट में स्क्रीन ऑब्जेक्ट QWebEnginePage

इन विचारों में, स्क्रीन के आकार के आधार पर विंडो को स्थिति/आकार बदलने के लिए जावास्क्रिप्ट कुछ सामान कर रहा है। screen ऑब्जेक्ट इस तरह की जानकारी देना है। (screen doc)

लेकिन मेरे QWebEnginePage में, स्क्रीन लोडिंग पूरी लोडिंग प्रक्रिया के दौरान खाली है।

यदि मैं पृष्ठ पर कहीं भी screen.height प्राप्त करने के लिए बटन पर श्रोता डालता हूं, तो यह अब काम करता है।

//js local file called in html head 

//screen = {} 
document.addEventListener("load", function(event) { 
    //screen = {} 
    new QWebChannel(qt.webChannelTransport, function(channel) { 
    //screen = {} 
    //stuff 
    channel.object.myClass.show(function(res){ //Qt function that calls the show() method of the QWebEngineView 
     //screen = {} 
    }); 

    }); 

    document.getElementById("myBtn").addEventListener("click", function(){ 
    console.log("height:" + screen.height); // screen: 1440 
    }); 
}); 

तो मेरे सवाल का, मैं कैसे screen मूल्यों मेरी जावास्क्रिप्ट में कुछ बिंदु पर एक्सेस कर सकते हैं?

उत्तर

1

मुझे लगता है कि इस समय आप अपने screen ऑब्जेक्ट तक पहुंचने का प्रयास कर रहे हैं, यह उपलब्ध नहीं है। दरअसल, आपकी एचटीएमएल फाइल सीधे लोड हो जाएगी, लेकिन जावास्क्रिप्ट ऑब्जेक्ट्स/प्रोग्राम्स या स्टाइल शीट्स (जैसे सीएसएस फाइल) जैसी अन्य ऑब्जेक्ट असीमित रूप से लोड की जाएंगी।

यह QWebEnginePage के दस्तावेज में समझाया गया है:

एचटीएमएल तुरंत भरी हुई है; बाह्य वस्तुओं को असीमित रूप से लोड किया जाता है।

इस प्रकार, जबकि आपका पृष्ठ लोड नहीं होता है, आप इस संपत्ति तक नहीं पहुंच सकते हैं। हालांकि, पृष्ठ लोड होने के बाद आप इसे एक्सेस कर सकते हैं, जैसे आप वास्तव में बटन पर श्रोता के साथ कर रहे हैं। इन गुणों को प्राप्त करने का एक और तरीका है C++ पक्ष (see this answer) में उन्हें पुनर्प्राप्त करने के लिए अपनी कक्षा में Q_INVOKABLE विधियों को परिभाषित करना है।

+0

'लोड' ईवेंट क्या नहीं करना चाहिए? दस्तावेज़ के बाद ट्रिगर हो जाएं और इसके आश्रित संसाधन लोड हो गए हैं? मैं बस 'क्यूवेबेज' से माइग्रेट किया गया, जहां मुझे लगता है कि बाह्य वस्तुओं को तुल्यकालिक रूप से लोड किया गया था। हां मैं इन मानों को पुनर्प्राप्त करने के लिए 'Q_INVOKABLE' विधि का उपयोग कर सकता हूं। बस यह सुनिश्चित कर रहा हूं कि मैं पहले जैसा नहीं कर सकता। – hereismass

+0

वैश्विक जावास्क्रिप्ट चर "विंडो" "लोड" ईवेंट को सक्रिय करता है, फिर 'QWebEnginePage' सिग्नल' loadFinished() 'सिग्नल को उत्सर्जित करता है और उसके बाद ही आप गुणों को पुनर्प्राप्त कर सकते हैं – IAmInPLS

+1

मैंने लोड लोड के बाद' स्क्रीन 'मानों को पढ़ने का प्रयास किया है () 'सिग्नल, और' स्क्रीन' अभी भी उपलब्ध नहीं है। वास्तव में, 'DomContentLoaded' से पहले, 'लोडफिनिश()' जावास्क्रिप्ट ईवेंट' लोड' से पहले उत्सर्जित होता है। मैं आपकी सलाह का पालन करूंगा और इन मानों को प्राप्त करने के लिए 'Q_INVOKABLE' विधियों को लागू करूंगा। धन्यवाद :) – hereismass

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