2017-09-18 12 views
1

원격 URL이 있으며 웹보기에서로드하려고합니다. 이 페이지는 헤더에 의해 보호됩니다. 페이지가로드되고 있지만로드하려고하는 HTML 안에있는 상대 URL을로드하지 않습니다.Android WebView에서 상대 경로 URL을로드 할 수 없습니다.

동일한 URL이 웹에서 완벽하게 작동하지만 여기에는로드되지 않습니다. 주요 문제는 자바 스크립트 파일을로드하지 않는다는 것입니다.

WebSettings webViewSettings = webView.getSettings(); 
    webViewSettings.setJavaScriptEnabled(true); 
    webViewSettings.setDomStorageEnabled(true); 
    webViewSettings.setSupportZoom(true); 
    webViewSettings.setBuiltInZoomControls(true); 
    webViewSettings.setDisplayZoomControls(true); 
    webViewSettings.setAllowFileAccess(true); 
    webViewSettings.setLoadWithOverviewMode(true); 
    webViewSettings.setUseWideViewPort(true); 
    webViewSettings.setPluginState(WebSettings.PluginState.ON); 


    webView.setWebViewClient(new WebViewClient() { 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      Toast.makeText(Report.this,"Finished loading",Toast.LENGTH_SHORT).show(); 
     } 




     @Override 
     public WebResourceResponse shouldInterceptRequest(WebView view, String url) { 

      try { 
       DefaultHttpClient client = new DefaultHttpClient(); 
       HttpGet httpGet = new HttpGet(flip_book); 


       httpGet.setHeader("Cookie", "JSESSIONID=" + preferencesHelper.getPref("JSESSIONID") + "; X-CSRF-TOKEN=" + preferencesHelper.getPref(preferencesHelper.csrftoken)); 
       httpGet.setHeader("JSESSIONID", preferencesHelper.getPref("JSESSIONID")); 
       httpGet.setHeader("X-CSRF-TOKEN", URLEncoder.encode(preferencesHelper.getPref(preferencesHelper.csrftoken), "UTF-8")); 

       HttpResponse httpReponse = client.execute(httpGet); 
       InputStream responseInputStream = httpReponse.getEntity().getContent(); 

       return new WebResourceResponse("text/html", "charset=UTF-8", responseInputStream); 

       //text/html 

      } catch (ClientProtocolException e) { 
       //return null to tell WebView we failed to fetch it WebView should try again. 
       return null; 
      } catch (IOException e) { 
       //return null to tell WebView we failed to fetch it WebView should try again. 
       return null; 
      } 
     } 


    }); 

    webView.loadData("<iframe src=\"" + 
        "" + 
        flip_book + 
        "\"></iframe>", "text/html", 
      "utf-8"); 

이 도와주세요 :

여기 내 코드입니다.

+1

을 내가 상대 URL 부분 있음을 받고 있지 않다. 그걸 제대로 설명해 주시겠습니까? @ Ruhani –

+0

@PratikDasa http://www.coffeecup.com/help/articles/absolute-vs-relative-pathslinks/ –

+0

상대 경로 URL이로드되지 않도록 하시겠습니까? 이것이 바로 문제입니까? @ Ruhani –

답변

0

는이 같은 OkHTTP의 뭔가를 시도 할 수

loader.showLoader(); 

    webView.setWebViewClient(new WebViewClient() { 



     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      loader.dismissLoader(); 
     } 

     @Override 
     public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { 
      super.onReceivedError(view, request, error); 
      loader.dismissLoader(); 
      showAlert("Something went wrong","Ok"); 
     } 

     @Override 
     public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 

      try { 

       String url = request.getUrl().toString(); 

       return getNewResponse(url); 

      } catch (Exception e) { 
       //return null to tell WebView we failed to fetch it WebView should try again. 
       return null; 
      } 
     } 


     private WebResourceResponse getNewResponse(String url) { 

      try { 
       OkHttpClient httpClient = new OkHttpClient(); 

       Request request = new Request.Builder() 
         .url(url.trim()) 
         .addHeader("Cookie", "JSESSIONID=" + preferencesHelper.getPref("JSESSIONID") + "; X-CSRF-TOKEN=" + preferencesHelper.getPref(preferencesHelper.csrftoken)) 
         .addHeader("JSESSIONID", preferencesHelper.getPref("JSESSIONID")) 
         .addHeader("X-CSRF-TOKEN", URLEncoder.encode(preferencesHelper.getPref(preferencesHelper.csrftoken), "UTF-8")).build(); 

       Response response = httpClient.newCall(request).execute(); 

       return new WebResourceResponse(
         null, 
         response.header("content-encoding", "utf-8"), 
         response.body().byteStream() 
       ); 

      } catch (Exception e) { 
       return null; 
      } 

     } 




    }); 



    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setSupportZoom(true); 
    webView.getSettings().setBuiltInZoomControls(true); 
    webView.getSettings().setDisplayZoomControls(true); 
    webView.getSettings().setUseWideViewPort(true); 


    webView.loadUrl(flip_book); 
+0

작품! Adish 감사합니다 !! –

+0

근무중인 경우 제 답변을 수락하십시오. :-) – Adhish

0

작동한다 수 있으며, 아래의 코드를 시도하십시오 :

WebSettings webViewSettings = webView.getSettings(); 
    webViewSettings.setJavaScriptEnabled(true); 
    webViewSettings.setDomStorageEnabled(true); 
    webViewSettings.setSupportZoom(true); 
    webViewSettings.setBuiltInZoomControls(true); 
    webViewSettings.setDisplayZoomControls(true); 
    webViewSettings.setAllowFileAccess(true); 
    webViewSettings.setLoadWithOverviewMode(true); 
    webViewSettings.setUseWideViewPort(true); 
    webViewSettings.setPluginState(WebSettings.PluginState.ON); 


    webView.setWebViewClient(new WebViewClient() { 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      Toast.makeText(Report.this,"Finished loading",Toast.LENGTH_SHORT).show(); 
     } 




     @Override 
     public WebResourceResponse shouldInterceptRequest(WebView view, String url) { 

      try { 
       DefaultHttpClient client = new DefaultHttpClient(); 
       HttpGet httpGet = new HttpGet(flip_book); 


       httpGet.setHeader("Cookie", "JSESSIONID=" + preferencesHelper.getPref("JSESSIONID") + "; X-CSRF-TOKEN=" + preferencesHelper.getPref(preferencesHelper.csrftoken)); 
       httpGet.setHeader("JSESSIONID", preferencesHelper.getPref("JSESSIONID")); 
       httpGet.setHeader("X-CSRF-TOKEN", URLEncoder.encode(preferencesHelper.getPref(preferencesHelper.csrftoken), "UTF-8")); 

       HttpResponse httpReponse = client.execute(httpGet); 
       InputStream responseInputStream = httpReponse.getEntity().getContent(); 

       return new WebResourceResponse("text/html", "charset=UTF-8", responseInputStream); 

       //text/html 

      } catch (ClientProtocolException e) { 
       //return null to tell WebView we failed to fetch it WebView should try again. 
       return null; 
      } catch (IOException e) { 
       //return null to tell WebView we failed to fetch it WebView should try again. 
       return null; 
      } 
     } 


    }); 

    webView.loadDataWithBaseURL("<iframe src=\"" + 
        "" + 
        flip_book + 
        "\"></iframe>", "text/html", 
      "utf-8",null); 
+0

여기서 변경 한 사항을 알고 싶습니까? –

+0

webView.loadDataWithBaseURL이 메서드가 변경되었습니다. @ RuhaniChoudhary –

+0

고맙습니다 @Pratik하지만 그 doesnt 작품. 구문이 올바르지 않습니다. –