2011-04-07 7 views
26

मुझे पता है कि कैसे निर्धारित करने के लिए चाहते हैं जब एक WebView पूरी तरह से लोड हो रहा है किया है।एंड्रॉइड वेबव्यू पूरी तरह लोड होने पर कैसे निर्धारित किया जाए?

मुझे पूरी तरह से परिभाषित करने दें।

  • सभी रीडायरेक्ट
  • हुआ है पेज दिख प्रदर्शित किया जाता है, कुछ भी नहीं अभी तक इस सवाल का

बुरा जवाब लोड करने के लिए दिया गया है:

WebViewClient.onPageFinished() - यह कई बार आग अगर वहाँ रिडायरेक्ट्स एक पृष्ठ लोड हो रहा है। पेज प्रदर्शित होने से पहले यह भी आग लगती है।

PictureListener.onNewPicture() - यह हर बार स्क्रीन परिवर्तन और AFAICT प्रत्येक पुनर्निर्देश सक्रिय करता है। मुझे कैसे पता चलेगा कि फायरिंग अंतिम कौन सा है?

WebChromeClient.onProgressChanged() - एक ही समस्या के रूप में onPageFinished। क्यों यह स्वीकार्य नहीं है स्पष्ट किया जाना चाहिए, - (के बाद डेविड नीचे इस समाधान का सुझाव दिया गया है)

Thread.sleep(5000)

बेशक

, ऊपर का एक चतुर संयोजन है कि काम करता है अधिक उचित होगा।

मैं यह पूछना क्यों चाहता हूं कि आप पूछें? क्योंकि मैं कुछ जावास्क्रिप्ट एक बार इंजेक्षन करना चाहते हैं एक बार वेबव्यू पूरी तरह से लोड हो रहा है किया है।

+1

अपने 'WebViewClient.onPageFinished()' "खराब उत्तर" में जोड़ना: [इस] के अनुसार (http://stackoverflow.com/a/5172952/725417), यह कई बार ** ** ** आपके पास एक पृष्ठ में कई iframes हैं। – uTubeFan

+0

@ करलोस मैन ठीक वही स्थिति में है जैसा आप थे।एकमात्र चीज जो मेरी स्थिति को और खराब करती है वह यह है कि पिक्चर लिस्टनर को हटा दिया गया है। क्या आप समाधान के साथ आने में सक्षम थे? मुझे वेबव्यू में पृष्ठों की कुल संख्या की गणना करना है जिसके लिए मुझे स्क्रीन की चौड़ाई के साथ सामग्री चौड़ाई को विभाजित करने की आवश्यकता है। लेकिन जब तक पेज स्क्रीन पर पूरी तरह से प्रस्तुत नहीं किया जाता है तब तक मैं ऐसा नहीं कर सकता। कोई समाधान? –

+0

@ अरुणवकृष्णन आखिरी बार मैंने देखा कि यह 3 साल पहले था। अंत में मुझे लगता है कि मैंने स्वीकार्य उत्तर के समान कुछ किया है। सौभाग्य! –

उत्तर

8

डेविड कैंट को प्रतिक्रिया हेडर देखने के लिए उनके सुझाव के लिए धन्यवाद।

मैंने पाया बहुत अच्छी तरह से काम करने के लिए निम्नलिखित:

इसके बजाय, वेबव्यू HTTP अनुरोध प्रदर्शन होने के

उन्हें करने के अपने आप को तो आप रीडायरेक्ट के लिए HTTP स्थिति कोड देख सकते हैं। पुनर्निर्देशन श्रृंखला का पालन करें। जब आप किसी ऐसे अनुरोध पर जाते हैं जो रीडायरेक्ट नहीं करता है तो ध्वज सेट करें और webview.loadDataWithBaseURL के माध्यम से वेबव्यू पर डेटा भेजें। ध्वज WebViewClient.onPageFinished() में चेक किया गया है, इसलिए यह जानता है कि सभी रीडायरेक्ट किए जाते हैं। इस बिंदु पर जावास्क्रिप्ट इंजेक्शन दिया जा सकता है। निश्चित रूप से पृष्ठ इस बिंदु पर कुछ जावास्क्रिप्ट हेरफेर कर रहा है, यह जानना मुश्किल है, इसलिए जावास्क्रिप्ट को देरी (500ms कहें) जोड़ना डीओएम को व्यवस्थित करने की अनुमति देता है। setTimeout(function(){/* your code */}, 500)

+1

जानना उपयोगी है! पृष्ठ के अपने जावास्क्रिप्ट के लिए, यह समाप्त होने पर पता लगाना मुश्किल है। –

+1

@ कार्लोस रेंडन +1 एक महान रूपरेखा के लिए +1। मुझे आश्चर्य है कि यह वेबव्यू या इसके किसी भी उपग्रह इंटरफेस में लागू नहीं किया गया है। यह सुविधा बहुत जरूरी है, फिर भी वेबव्यू लोग ऐसा करने में सक्षम हैं केवल पिक्चर लिस्टनर को छोड़ दें। कोई विचार क्यों? – uTubeFan

+0

और उस समय, यह पता चला है कि मैं केवल वेबव्यू में http प्रतिक्रिया शीर्षकों तक पहुंचने के बारे में सपना देख रहा हूं [http://stackoverflow.com/questions/3134389/access-the-http-response-headers -इन-ए-वेबव्यू)। – uTubeFan

1

क्या आपने अपना खुद का WebChromeClient सेट करना देखा है?

यह onProgressUpdated तरह लग रहा है आपको सूचित कर सकते हैं जब एक पृष्ठ पूरी तरह लोड किया है।

यह एंड्रॉइड के अंतर्निर्मित ब्राउज़र द्वारा उपयोग की जाने वाली विधि प्रतीत होता है।

+0

सुझाव के लिए धन्यवाद। दुर्भाग्यवश, यह WebViewClient.onPageFinished() के समान समस्या है, यह रीडायरेक्ट के कारण कई बार आग लगती है। उदाहरण के लिए "gmail.com" पर यह प्रगति के साथ 3 बार आग लगती है == 100. –

+1

प्रगति के लिए अगला 0 मान कब आता है? अगर प्रतिक्रिया के बाद यह सीधे आग लगती है तो एक रीडायरेक्ट जारी करता है, तो टाइमआउट का उपयोग करना सुरक्षित हो सकता है और मान लें कि आप अंतिम अनुरोध पर हैं। अन्यथा, मैं प्रतिक्रिया शीर्षलेख या कुछ समान पाने के लिए एक रास्ता तलाश रहा था। –

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

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