2012-03-21 11 views
6

मैं WebViewClient का उपयोग कर रहा हूं। क्या हमें पेजस्टार्ट() कॉलबैक पर हमेशा देखना चाहिए, जो हमेशा एक चाहिएऑवर्राइडउर्ल लोडिंग() कॉलबैक के साथ जोड़ा जाता है? अगर मैं अपने वेब व्यू में example.com लोड करता हूं, तो क्या हमें दोनों तरीकों को वापस बुलाया जाना चाहिए? डॉक्स से:WebViewClient - onPageStarted() बनाम चाहिएOverrideUrlLoading()?

onPageStarted()

मेजबान आवेदन है कि एक पृष्ठ लोड हो रहा है शुरू कर दिया है सूचित करें। इस विधि को प्रत्येक मुख्य फ्रेम लोड के लिए एक बार बुलाया जाता है, इसलिए iframes या framesets वाला पृष्ठ मुख्य फ्रेम के लिए एक बार पेज स्टार्ट पर कॉल करेगा। इसका यह भी अर्थ है कि एम्बेडेड फ्रेम की सामग्री में परिवर्तन होने पर पेजस्टार्ट को कॉल नहीं किया जाएगा, यानी एक लिंक पर क्लिक करना जिसका लक्ष्य आईफ्रेम है।

shouldOverrideUrlLoading()

मेजबान आवेदन जब एक नया यूआरएल के बारे में मौजूदा WebView में लोड किया जा रहा है अपने हाथों में लेने के लिए एक मौका दे। यदि WebViewClient प्रदान नहीं किया गया है, तो डिफ़ॉल्ट रूप से WebView गतिविधि प्रबंधक से यूआरएल के लिए उचित हैंडलर चुनने के लिए कहेंगे। यदि WebViewClient प्रदान किया गया है, तो सही वापसी का मतलब है कि होस्ट एप्लिकेशन यूआरएल को संभालता है, जबकि झूठी वापसी का मतलब है कि वर्तमान वेब व्यू यूआरएल को संभालता है।

मैं प्रत्येक विधि में एक लॉग स्टेटमेंट डालता हूं, और मुझे लगता है कि वे हमेशा एक साथ जोड़े नहीं जाते हैं। वे किस मामले में नहीं होंगे?

धन्यवाद

http://developer.android.com/reference/android/webkit/WebViewClient.html

+0

यदि आप 'mustOverrideUrlLoading() 'पर सत्य वापस लौटते हैं तो' onPageStarted()' कॉल नहीं किया जाएगा। इसके अलावा, यह संभव हो सकता है कि कभी-कभी दो अनुरोध वापस आने पर 'ऑनपेज स्टार्ट' कभी नहीं बुलाया जाएगा, इस प्रकार संभावित रूप से उनमें से एक को जाने से रोकना होगा। हालांकि, मैं बाद के बारे में इतना भरोसा नहीं कर रहा हूं। – Jakar

+0

मेरे आवेदन में मिलने वाले लॉग के मुताबिक, किसी भी क्रम में 'चाहिएऑवर्राइडउर्ल लोडिंग' और' ऑनपेजस्टार्ट 'को किसी भी क्रम में बुलाया जा सकता है, जो बहुत भ्रमित है। मुझे अभी तक पता नहीं चला कि यह किस परिस्थिति में होता है। – Stan

उत्तर

1

मैं जानता हूँ कि इस सवाल का वर्ष है, लेकिन वैसे भी जवाब दे रहा है। AFAIK, mustOverrideUrlLoading() को पृष्ठ में प्रत्येक यूआरएल के लिए बुलाया जाएगा जहां पेजस्टार्ट() को केवल पृष्ठ के शीर्ष यूआरएल के लिए बुलाया जाएगा।

+1

ऐसा लगता है, आप 'shouldInterceptRequest' के साथ 'चाहिएऑवर्राइडउर्ल लोडिंग' को भ्रमित कर रहे हैं। पहले प्रति पृष्ठ केवल एक बार कहा जाता है, दूसरा प्रत्येक http अनुरोध के लिए होता है (यदि आप इसे "यूआरएल" कहते हैं)। – Stan

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