2015-04-03 9 views
5

क्यों कुछ पेज मेरे वेबव्यू में लोड नहीं होते हैं (लेकिन क्रोम में ठीक काम करने लगते हैं)? उदाहरण के लिए:क्रोम ऐप में यूआरएल लोड करता है, लेकिन वेबव्यू

मैं जे एस सक्षम करने के लिए मेरी WebView निर्धारित किया है। यहाँ मेरी WebView init कोड है:

webView = (WebView) findViewById(R.id.webview); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setBuiltInZoomControls(true); 
    webView.getSettings().setDisplayZoomControls(false); 
    webView.getSettings().setDomStorageEnabled(true); 
    webView.setWebViewClient(new WebViewClient()); 

    webView.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) { 

      progressBar.setProgress(progress); 

      if (progress == 100) { 
       progressBar.setVisibility(View.GONE); 
      } 
      else { 
       progressBar.setVisibility(View.VISIBLE); 
      } 
     } 
    }); 

    webView.loadUrl(url); 

उत्तर

0

मैं अपने प्रोजेक्ट पर एक बहुत ही इसी तरह की वेबव्यू कोड है, मैं सिर्फ यूआरएल आपके द्वारा दिए गए बदल दिया।

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_user_agreement); 
    WebView webView = (WebView) findViewById(R.id.userAgreementView); 
    final ProgressWheel progressWheel = (ProgressWheel) findViewById(R.id.progress_bar); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setBuiltInZoomControls(true); 
    webView.getSettings().setDisplayZoomControls(false); 
    webView.getSettings().setDomStorageEnabled(true); 
    //webView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"); 
    Log.v("UA", webView.getSettings().getUserAgentString()); 
    String url = getIntent().getStringExtra("data"); //Urls provided by other activity 
    if (url != null && !url.equals("")) { 
     webView.setWebChromeClient(new WebChromeClient() { 
      public void onProgressChanged(WebView view, int progress) { 

       //progress wheel fills here etc. 
       // ... 
       // ... 
       } 
      } 
     }); 
    webView.loadUrl(url); 

    } 

} 

http://onlinelibrary.wiley.com/doi/10.1002/art.39115/pdf इस एक कोई खामियों और कोई गलत व्यवहार के साथ वेबव्यू में एक आकर्षण की तरह भरी हुई।

फिर मैंने इस http://www.ajpmonline.org/article/S0749-3797(14)00628-X/fulltext को आजमाया, जब वेबव्यू एक नई मूल क्रोम गतिविधि लोड करने को पूरा करता है तो तुरंत शुरू होता है और पृष्ठ के मोबाइल संस्करण को एक अलग गतिविधि में लोड करता है।

मैंने अपने डेस्कटॉप क्रोम के साथ वेबसाइट के व्यवहार की जांच की, जब मैं एंड्रॉइड उपयोगकर्ता एजेंट स्ट्रिंग के साथ http अनुरोध करता हूं तो यह निम्न चीज़ें करने के लिए बाहर निकलता है।

  1. वापसी 302 स्थिति कोड और http://www.ajpmonline.org/action/mobileChoice?originalRequestUri=%2Farticle%2FS0749-3797%2814%2900628-X%2Ffulltext&userInterface=mobile
  2. एक कुकी MobileUI बुलाया सेट पर पुन: निर्देशित और एक 302 स्थिति कोड के साथ मूल पृष्ठ पर रीडायरेक्ट।
  3. मोबाइलयूआई कुकी के आधार पर पृष्ठ के मोबाइल संस्करण को लोड करें। उस बिंदु पर वेबसाइट एक नई विंडो पॉप अप करने के लिए जावास्क्रिप्ट कोड चला रही है, जो मेरे गैलेक्सी एस 4 मिनी पर व्यवहार बताती है।

तब मैंने उपयोगकर्ता एजेंट स्ट्रिंग को डेस्कटॉप ब्राउज़र के रूप में नकल करने का निर्णय लिया। मैंने http://www.useragentstring.com/pages/Chrome/ से एक UA स्ट्रिंग चुनी और इसे लोड यूआरएल विधि और voilà से पहले इस तरह सेट करें!

webView.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"); 
    Log.v("UA", webView.getSettings().getUserAgentString()); 

यह बढ़त स्थिति हो सकता है और हो सकता है आपने जो URL व्यवहार लोड कर रहे हैं बदल सकते हैं पर निर्भर करता है, लेकिन आप एक उचित उपयोगकर्ता एजेंट स्ट्रिंग के साथ वेबसाइटों के डेस्कटॉप संस्करण लोड करने के लिए मजबूर कर सकते हैं।

+0

दुर्भाग्य से मैं उपयोगकर्ता एजेंट को डेस्कटॉप ब्राउज़र के रूप में सेट नहीं कर सकता, क्योंकि मैं मोबाइल पेज लोड करना चाहता हूं। पहले लिंक के लिए, मुझे अब एहसास हुआ कि यूआरएल की कोशिश करने से पहले मेरे पास एक लॉगिन कुकी सेट था।WebView में केवल URL स्रोत पर वास्तविक सामग्री तक पहुंचने पर समस्याएं लोड हो रही हैं, जिन्हें आप नहीं देखते हैं क्योंकि आपने लॉग इन नहीं किया है। मुझे देखने दो कि मैं उस के लिए एक बेहतर उदाहरण पा सकता हूं या नहीं। –

+0

इस मामले में आप वेबपृष्ठ की सामग्री को बदल सकते हैं जो समस्याओं का कारण बनता है। http://stackoverflow.com/a/8274881/3399234 यह उत्तर दिखाता है कि यह कैसे करें, लेकिन निश्चित रूप से यह उचित और कुशल समाधान नहीं है। – Ugur

+0

आप इस यूआरएल के साथ कोशिश कर सकते हैं http://onlinelibrary.wiley.com/doi/10.1002/iid3.28/epdf –

0

मैं इस कोड का उपयोग कर रहा:

WebSettings settings = webView.getSettings(); 
    settings.setLoadWithOverviewMode(true); 
    settings.setUseWideViewPort(true); 
    settings.setJavaScriptEnabled(true); 

    settings.setAppCacheEnabled(false); 
    settings.setCacheMode(WebSettings.LOAD_NO_CACHE); 
    settings.setDatabaseEnabled(false); 
    settings.setDomStorageEnabled(false); 
    settings.setGeolocationEnabled(false); 
    settings.setSaveFormData(false); 

आशा है कि यह आप कर सकते हैं।

+0

यह काम नहीं करता है। –

+0

मेरे मामले में एक आकर्षण की तरह काम करता है। । । –

0

मैंने देखा, पहले इस यूआरएल के लिए: http://www.ajpmonline.org/article/S0749-3797(14)00628-X/fulltext ऐसा लगता है कि वे 'jwplayer' का उपयोग कर रहे हैं और मुझे लगता है कि वेबव्यू ने इसे संभाल नहीं लिया है, इसलिए यह 'असली' वेब ब्राउज़र लॉन्च करता है।

इस कोड को ऊपर यूआरएल के लिए काम किया:

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (Uri.parse(url).getHost().contains("secure.jbs") || Uri.parse(url).getHost().contains("ajpmonline")) 
      return false; 

     Log.d("MYWEBVIEWCLIENT", "This url couldn't not be handled by the webclient : " + Uri.parse(url).getHost()); 
     return true; 
    } 
} 

मैं मानता हूँ यह यह करने के लिए सबसे अच्छा तरीका नहीं है। मुझे आपके वेब व्यू के उद्देश्य को नहीं पता है, आप अपने कस्टम वेब व्यू क्लाइंट को कार्यान्वित कर सकते हैं यदि आप पहले से ही यूआरएल को जानते हैं जो अंदर लोड होगा।

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