लेकिन दो तरीकों से ऊपर इस तरह के रूप
1. shouldOverrideUrlLoading
, एक js जब एक नया पृष्ठ के बारे में है, जबकि shouldInterceptRequest
खोले जाने के लिए हर बार एक संसाधन एक सीएसएस फ़ाइल की तरह भरी हुई है कहा जाता है कहा जाता है अलग उद्देश्य के लिए उपयोग कर रहे हैं फ़ाइल इत्यादि
2. यदि कोई उपयोगकर्ता वेबव्यू के भीतर से संसाधन का अनुरोध करता है तो अनुरोध को रोकने के लिए WebViewClient
कक्षा के shouldOverrideUrlLoading
विधि के उपयोग के माध्यम से संभव है। उदाहरण कोड नीचे प्रस्तुत किया गया है। Source
private class MyWebViewClient extends WebViewClient {
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("www.google.com")) {
return true;
}
return false;
}
}
विधि मेजबान आवेदन जब एक नया URL के बारे में मौजूदा WebView में लोड किया जा रहा है अपने हाथों में लेने के लिए एक मौका देता है। सच्चाई का रिटर्न वैल्यू होस्ट होस्ट एप्लिकेशन यूआरएल को संभालता है, जबकि झूठी वापसी का मतलब है कि वर्तमान वेबव्यू यूआरएल को संभालता है। उपरोक्त कोड संसाधनों को "www.google.com" होस्ट से लोड होने से रोकता है।
हालांकि, विधि संसाधन से लोडिंग को अवरुद्ध नहीं करती है, उदाहरण के लिए एक HTML या SCRIPT टैग के भीतर IFRAME या src विशेषता से। इसके अतिरिक्त XmlHttpRequests को भी अवरुद्ध नहीं किया जाएगा। इन अनुरोधों को अवरुद्ध करने के लिए आप WebViewClient shouldInterceptRequest
विधि का उपयोग कर सकते हैं। उदाहरण कोड नीचे प्रस्तुत किया गया है।
@Override
public WebResourceResponse shouldInterceptRequest(final WebView view, String url) {
if (url.contains(".js")) {
return getWebResourceResponseFromString();
} else {
return super.shouldInterceptRequest(view, url);
}
}
private WebResourceResponse getWebResourceResponseFromString() {
return getUtf8EncodedWebResourceResponse(new StringBufferInputStream("alert('!NO!')"));
}
private WebResourceResponse getUtf8EncodedWebResourceResponse(InputStream data) {
return new WebResourceResponse("text/javascript", "UTF-8", data);
}
विधि संसाधन अनुरोध के होस्ट एप्लिकेशन को सूचित करती है और एप्लिकेशन को डेटा वापस करने की अनुमति देती है। यदि वापसी मूल्य शून्य है, तो वेबव्यू सामान्य रूप से संसाधन को लोड करना जारी रखेगा। अन्यथा, वापसी प्रतिक्रिया और डेटा का उपयोग किया जाएगा। ऊपर दिया गया कोड जावास्क्रिप्ट संसाधनों (.js) के लिए अनुरोधों को रोकता है और अनुरोधित संसाधन के बजाय अलर्ट देता है। WebViewClient shouldOverrideUrlLoading और shouldInterceptRequest
जाहिर है, shouldOverrideUrlLoading() जब loadUrl पहले के लिए कहा जाता है कहा जाता है नहीं प्राप्त करता है:
पर अधिक देखें। लोकप्रिय धारणा के विपरीत, किसी भी आंतरिक लिंक को पहले से लोड किए गए वेब पेज से क्लिक करने पर ओवरराइडउर्ल लोडिंग() को कॉल किया जाना चाहिए। – AnupamChugh