2014-10-30 10 views
21

कोई भी कृपया मुझे public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request) और public boolean shouldOverrideUrlLoading(WebView view, String url) के बीच अंतर बताएं।कंधेराइडुरलोडिंग और कंधे के बीच अंतर?

मैं एक Android आवेदन है, जिसमें एक स्ट्रिंग मेरी WebView मैं में एक क्लिक करें घटना की प्रतिक्रिया के रूप में मिल गया है बना रहा हूं इस स्ट्रिंग की दुकान और प्रदर्शित था.मैं इन methods.I के दोनों देखा करना चाहते shouldOverrideUrlLoading उपयोग करने की कोशिश जो जब मैं google.com का उपयोग करके एक नमूना ऐप बनाने के साथ चेक करता हूं तो मैंने रीडायरेक्ट यूआरएल वापस कर दिया है जिसे मैंने अपने WebView में लोड किया था और मेनू पर क्लिक किया था।

क्या कोई मुझे कृपया दोनों तरीकों के बीच अंतर बता सकता है और मुझे किस का उपयोग करना चाहिए?

उत्तर

1

मुझे विश्वास है कि shouldOverrideUrlLoading जब एक नया पृष्ठ का वेब दृश्य में लोड किया जा रहा है उत्पन्न होता है, तो उदाहरण के लिए, जब आप कर अपने प्रारंभिक:

webview.loadUrl("file:///android_asset/web/index.html");  

अपने shouldOverrideUrlLoading लागू हो जाएगी, और इसे फिर से लागू हो जाएगी यदि उपयोगकर्ता किसी नए पृष्ठ पर ब्राउज़ करने के लिए लिंक पर क्लिक करता है।

चाहिएइंटरसेप्ट रिवेस्ट को वर्तमान पृष्ठ के भीतर किए गए सभी अनुरोधों के लिए बुलाया जाना चाहिए, उदाहरण के लिए। जब मैं एचटीएमएल आयात फोंट देखता हूं तो मुझे देखना चाहिए कि इंटरसेप्ट रिवेस्ट को बुलाया जाना चाहिए, या जब वेबव्यू मेरे पेज पर छवियों को लोड करने का प्रयास करता है तो इसे कॉल किया जाता है (लेकिन मुझे इसे एजेक्स अनुरोधों के लिए बुलाया नहीं जा रहा है, इसलिए मैं अभी भी थोड़ा उलझन में हूं)।

+0

जाहिर है, shouldOverrideUrlLoading() जब loadUrl पहले के लिए कहा जाता है कहा जाता है नहीं प्राप्त करता है:

पर अधिक देखें। लोकप्रिय धारणा के विपरीत, किसी भी आंतरिक लिंक को पहले से लोड किए गए वेब पेज से क्लिक करने पर ओवरराइडउर्ल लोडिंग() को कॉल किया जाना चाहिए। – AnupamChugh

23

एंड्रॉयड वेबकिट कार्यान्वयन डेवलपर जावास्क्रिप्ट के लिए इस तरह के रूप

  • सहायता, प्लगइन्स के लिए
  • सहायता,
  • फाइल सिस्टम प्रवेश,
  • संसाधन निरीक्षण android.webkit.WebSettings वर्ग के माध्यम से एक WebView को संशोधित करने की अनुमति देता है आदि

मेंसंसाधन निरीक्षण, ओवरराइड करके सामग्री और/या संसाधनों के अनुरोधों का निरीक्षण करना संभव है,और चाहिएइंटरसेप्ट रिवेस्ट विधियां।

लेकिन दो तरीकों से ऊपर इस तरह के रूप

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

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