2015-07-29 6 views
7

नहीं कहा जाना चाहिए मैं एक ईबुक रीडर बना रहा हूं जो वेबव्यू में पुस्तकों को लोड करने के लिए एपब प्रारूप का उपयोग करता है। कुछ पुस्तकों में एक ही अध्याय में कुछ हिस्सों के लिए एक लंगर लिंक है। प्रत्येक अध्याय एचटीएमएल के रूप में भरा हुआ है। इस कड़ी की तरहवेबव्यू चाहिएऑवरराइडउर्ल लोडिंग को

file:///storage/sdcard0/Android/data/com.abc.reader/files/Download/498935/epub/resources/498935/OEBPS/#footnote-165093-1-backlink 

मैं shouldOverrideUrlLoading() पद्धति का उपयोग करके कॉल वापस पाने की कोशिश की लग रही है कि कैसे है, लेकिन यह नहीं कहा रही है और यूआरएल about:blank

reader.setWebViewClient(new WebViewClient() { 


    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     Log.w("TESTTESTOVERRIDE "+url); 
     view.loadUrl(url); 
     return false; 
    } 


    @Override 
    public void onPageFinished(WebView view, String url) { 
     // after the data has been loaded, the following is executed 
     // TODO Auto-generated method stub 
     super.onPageFinished(view, url); 

      System.out.println("check.... onPageFinishedEntered.." 
        + url.toString()); 

      view.loadUrl(jsfileloadurl); 




    } 

रूप में दिखाया गया है जब मैं onPageFinished में लिंक प्रेस कोई विचार?

संपादित करें: 4.1 डिवाइसों में मुझे एंकर लिंक सही तरीके से मिलते हैं, लेकिन 4.4 या 5.0 में यह लगभग रिक्त है। (दोनों मामलों में shouldOverrideUrlLoading नहीं कहा जाता है)

+0

क्या आपने इसे लॉग बिल्ली में देखा था। कि overrideUrlLoading को –

+0

नहीं कहा जा रहा है। लॉग –

+0

पर कुछ भी नहीं ... इसे वापस लौटाएं ... और इसे फिर से प्रयास करने के बजाय .. –

उत्तर

-2

मुझे यकीन नहीं है कि नीचे आपकी समस्या का समाधान होगा या नहीं।

WebViewClient

reader.getSettings().setLoadWithOverviewMode(true); 
reader.getSettings().setUseWideViewPort(true); 

/*This makes the layout/page rendering independent of the devices. 
I use this to display local HTML pages.*/ 
reader.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL); 

स्थापित करने से पहले इसके अलावा नीचे दिए गए कोड को जोड़ने कृपया मैं ज़ूम नियंत्रण सक्षम है। कृपया ध्यान दें कि मैंने कई डिवाइस और ब्रांड (एचटीसी, सैमसंग, नेक्सस इत्यादि) के साथ एपीआई -10 से अपने कोड का परीक्षण किया है और पाया है कि shouldOverrideUrlLoading हर समय काम करता है।

बातें अच्छी तरह से काम नहीं करते हैं, WebViewClient विस्तार कोशिश करते हैं और ओवरराइड shouldOverrideUrlLoading विधि

class MyWebView extends WebViewClient{ 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return false; //THis should be false always 
    } 
} 

अब के रूप में reader.setWebViewClient(new MyWebView());

+0

नहीं, यह काम नहीं करता है। धन्यवाद –

+0

आपका लक्ष्य क्या है और एसडीकेवर्जन संकलित करें ?? –

+0

मेरा लक्ष्य संस्करण 22 है और एसडीके संस्करण संकलित 22 है। –

10

WebViewClient सेट मैं प्रोग्राम के रूप में यह परीक्षण नहीं किया है, लेकिन मेरा मानना ​​है कि आप का सामना कर रहे यह मुद्दा क्योंकि वेब्यूव ओएस 4.4 के बाद कैसे काम करता है में बड़े बदलाव हुए थे। आपको यह लिंक https://developer.android.com/guide/webapps/migrating.html#URLs

अनुभाग 'कस्टम यूआरएल हैंडलिंग' के तहत यह कहना चाहिए कि अमान्य यूआरएल के लिए ओवरराइडउरल लोडिंग() को नहीं बुलाया जाना चाहिए। आदर्श रूप से फ़ाइल: // को वैध यूआरएल के रूप में माना जाना चाहिए लेकिन ऐसा लगता है कि यह यहां नहीं हो रहा है।

एक संभावित समाधान है कि आप loadDataWithBaseURL के साथ मुख्य वेबव्यू सामग्री लोड करना और कुछ परीक्षण यूआरएल के रूप में बेसुरल प्रदान करना है। http://mytestap.testurl, यह गारंटी देगा कि ऑवरराइडउर्ल लोडिंग को हर समय बुलाया जाएगा। अगले चरण के रूप में आपको prefix 'http://mytestap.testurl' को हटाने की आवश्यकता है यदि प्राप्तकर्ता urlverrrring कॉलबैक में प्राप्त यूआरएल में मौजूद है।

+0

@shine_joseph: क्या आपने इस दृष्टिकोण की कोशिश की? – androgeek

0

हां। श्री एंड्रोगेक ने इसका उत्तर दिया। एंड्रॉइड ओएस 4.4 (केके) से, यदि आप कॉलबैक को लागू करना चाहते हैं जैसे कि चाहिएओवर्राइडउर्ल लोडिंग() या चाहिएइंटरसेप्टवेक्वेस्ट(), तो वेबव्यू उन्हें केवल वैध यूआरएल के लिए आमंत्रित करता है। यदि आप कस्टम यूआरएल का उपयोग कर रहे हैं और अपने नियंत्रण में हैं तो आपको ऊपर दिए गए तरीकों से आरएफसी 3986 मानक का पालन करना होगा। कृपया आरएफसी 3 9 86 से संबंधित फाइल की जांच करें: // और अपने यूआरएल को सही करें