2016-09-25 6 views
6

वर्तमान में, OnShouldStartLoadWithRequest केवल आईओएस पर समर्थित है। A PR to add support for this on Android बंद कर दिया गया था। यदि एंड्रॉइड पर एक वेब व्यू एक कस्टम यूआरएल योजना, the app will crash खोलने का प्रयास करता है - जो मेरे ऐप को भी क्रैश कर रहा है।एंड्रॉइड में यूआरएल लोड करने से वेबव्यू को रोकें (प्रतिक्रियात्मक मूल)

एप्लिकेशन मैं एक WebView एक कस्टम यूआरएल स्कीम खोलने के लिए और उस URL को खोलने से पहले इसे रद्द करने का प्रयास कर अवरोधन करने की जरूरत पर काम कर रहा हूँ (जो, iOS पर, OnShouldStartLoadWithRequest पर लौटने false ऐसा करने के लिए एक शानदार तरीका है)।

एंड्रॉइड पर ऐसा करने का सबसे अच्छा तरीका क्या है?

मैं इस कोड काम करना चाहता हूँ:

 <WebView 
      ref={WEBVIEW_REF} 
      source={{uri: INITIAL_URI}} 
      onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest} 
      style={{width, height: height - navBarHeight, backgroundColor: "#fff"}} 
     /> 

onShouldStartLoadWithRequest(navigator) { 
    if (navigator.url.indexOf(INTERCEPT_URL) === -1) { 
     return true; 
    }  
    return false; 
    } 

मैं बहुत ज्यादा कुछ भी है कि काम करता है के साथ व्यक्तिगत रूप से ठीक हूँ - ReactWebViewManager.java मैन्युअल संशोधित भी शामिल है। मुझे बस इसे दरवाजा बाहर निकालना होगा।

उत्तर

9

आप onNavigationStateChange संपत्ति का उपयोग कर सकते हैं, जो आपको onShouldStartLoadWithRequest पर प्राप्त होने पर navigator ऑब्जेक्ट प्राप्त करेगा।

<WebView 
     ref={WEBVIEW_REF} 
     source={{uri: INITIAL_URI}} 
     onShouldStartLoadWithRequest={this.onShouldStartLoadWithRequest} //for iOS 
     onNavigationStateChange ={this.onShouldStartLoadWithRequest} //for Android 

     style={{width, height: height - navBarHeight, backgroundColor: "#fff"}} 
    /> 

और फिर समारोह

onShouldStartLoadWithRequest(navigator) { 
    if (navigator.url.indexOf(INTERCEPT_URL) === -1) { 
     return true; 
    } else { 
     this.refs[WEBVIEW_REF].stopLoading(); //Some reference to your WebView to make it stop loading that URL 
     return false; 
    }  
} 

में मैं एक ही आवश्यकता के रूप में था, और कि how've मैं इसे हल है।

+3

'स्टॉपलोडिंग()' को कॉल करने के बाद, मेरा वेब व्यू अब स्पर्श ईवेंट को संभालता नहीं है। यदि उपयोगकर्ता एक लिंक पर क्लिक करता है और यह अपने ब्राउज़र में खुलता है, तो वे बाद में अपना ऐप खोल सकते हैं जो अभी भी वेब व्यू दिखाता है। यदि वे उस वेब व्यू में एक अलग लिंक पर क्लिक करने का प्रयास करते हैं तो यह कुछ भी नहीं करेगा। क्या आपको इसका सामना करना पड़ा? – ckeeney

0

यदि आप योजना को संशोधित कर सकते हैं, तो आप http प्रत्यय जोड़ सकते हैं ताकि WebViewManager उस योजना के साथ कोई इरादा बनाने की कोशिश न करे और इसे हल करने का प्रयास करें।

आप शायद ReactWebViewManager

public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    if (url.startsWith("http://") || url.startsWith("https://")) { 
     return 
    } 
    ... 
} 

में देखा URL http के साथ शुरू होता है प्रबंधक एक योजना के रूप में यह इलाज नहीं होंगे। मुझे पता है कि यह एक बदसूरत कामकाज है लेकिन हे, यह नौकरी करता है।

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