दुर्भाग्यवश, वर्तमान में यह सुनिश्चित करने के लिए वेबव्यू में कोई आसान तरीका नहीं है कि पृष्ठ पर सबकुछ सफलतापूर्वक लोड हो गया है। हम भविष्य में संस्करण में आने के लिए एक बेहतर एपीआई की उम्मीद कर रहे हैं। मुझे बताएं कि अब आप क्या कर सकते हैं।
सबसे पहले, वेबव्यू को आपके मुख्य पृष्ठ (जैसे खराब डोमेन नाम, आई/ओ त्रुटि इत्यादि) लोड करने के लिए सर्वर से कनेक्शन बनाने से रोकने वाली किसी भी समस्या का पता लगाने के लिए, आपको WebViewClient.onReceivedError
कॉलबैक का उपयोग करना चाहिए अन्य लोगों को सही ढंग से सुझाव देते हैं:
public class MyWebViewClient extends WebViewClient {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
// Make a note about the failed load.
}
}
myWebView.setWebViewClient(new MyWebViewClient());
तो सर्वर कनेक्शन सफल रहा था, और मुख्य पृष्ठ पर लिया गया और पार्स किया गया था, आप, WebView.onPageFinished
कॉलबैक प्राप्त होगा तो आप भी अपने WebViewClient
उपवर्ग में यह करने की जरूरत है:
public class MyWebViewClient extends WebViewClient {
...
@Override
public void onPageFinished(WebView view, String url) {
// Make a note that the page has finished loading.
}
...
}
यहां चेतावनी यह है कि यदि आपको सर्वर से HTTP त्रुटि मिली है (उदा। एक 404 या 500 त्रुटि), इस कॉलबैक को वैसे भी बुलाया जाएगा, यह केवल वही सामग्री है जिसे आप अपने वेब व्यू में प्राप्त करेंगे, एक सर्वर त्रुटि पृष्ठ होगा। लोग इसका निपटारा करने के तरीके के विभिन्न तरीकों का सुझाव देते हैं, यहां दिए गए उत्तरों को देखें: How can I check from Android WebView if a page is a "404 page not found"? असल में, यह वास्तव में उस पर निर्भर करता है कि आप "अच्छा" पृष्ठ और "त्रुटि" पृष्ठ होने की अपेक्षा करते हैं। दुर्भाग्यवश, ऐप के लिए WebView से HTTP प्रतिक्रिया कोड प्राप्त करने का कोई तरीका नहीं है।
कॉलबैक WebViewClient.onPageStarted
और WebViewClient.onProgressChanged
केवल तभी उपयोगी होते हैं जब आप पृष्ठ लोड कर रहे हों तो प्रगति पट्टी बनाना चाहते हैं।
भी ध्यान रखें कि है कि लोगों को आम तौर पर सुझाव है अधिभावी WebViewClient.shouldOverrideUrlLoading
के रास्ते सही नहीं है:
public class MyWebViewClient extends WebViewClient {
...
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// !!! DO NOT DO THIS UNCONDITIONALLY !!!
view.loadUrl(url);
return true;
}
...
}
क्या कुछ डेवलपर्स का एहसास है कि कॉलबैक भी गैर https योजनाओं के साथ subframes के लिए कहा जाता है। यदि आपको <iframe src='tel:1234'>
जैसे कुछ सामना करना पड़ेगा, तो आप view.loadUrl('tel:1234')
निष्पादित कर देंगे और आपका ऐप एक त्रुटि पृष्ठ दिखाएगा, क्योंकि WebView को tel:
URL लोड करने का तरीका नहीं पता है। यह सिर्फ प्रणाली से झूठी वापस जाने के लिए सिफारिश की है, यदि आप WebView लोड हो रहा है क्या करना चाहते हैं:
public class MyWebViewClient extends WebViewClient {
...
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// Returning 'false' unconditionally is fine.
return false;
}
...
}
इसका मतलब यह नहीं आप बिल्कुल shouldOverrideUrlLoading
से WebView.loadUrl
नहीं बुलाना चाहिए। बचने के लिए विशिष्ट पैटर्न सभी यूआरएल के लिए बिना शर्त शर्त कर रहा है।
क्या आप उत्तर को स्वीकार कर सकते हैं यदि यह आपकी समस्या का समाधान करने में मदद करता है। धन्यवाद –
@manishkumar निश्चित रूप से, कृपया मुझे परीक्षण करने के लिए समय दें –