2017-01-08 49 views
3

Webページにアクセスするために承認ヘッダーを使用していますが、WebviewClientを承認ヘッダーと共に使用してもCSSは表示されません。Android webviewカスタムヘッダーを使用してWebページにアクセスしようとしたときにcssとjavascriptがロードされない

public class TableViewTest extends AppCompatActivity { 

    WebView webView; 
    SharedPreferences pref; 

    @SuppressLint("SetJavaScriptEnabled") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_table_view_test); 

     String url = "http://myurl"; 
     pref = getSharedPreferences("app", Context.MODE_PRIVATE); 


     webView = (WebView) findViewById(R.id.webView1Id); 

     webView.setWebViewClient(wvc); 
     //webView.setVerticalScrollBarEnabled(true); 
     //webView.setHorizontalScrollBarEnabled(true); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.getSettings().setBuiltInZoomControls(true); 
     webView.getSettings().setDomStorageEnabled(true); 
     webView.getSettings().setUseWideViewPort(true); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE); 
      webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); 
     } 
     //webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 

     webView.loadUrl("http://myurl"); 

    } 


    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     webView.saveState(outState); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 
     webView.restoreState(savedInstanceState); 
    } 


    WebViewClient wvc = new WebViewClient() { 

     @SuppressWarnings("deprecation") 
     public WebResourceResponse shouldInterceptRequest(WebView view, String url) { 
      try { 
       final String acToken = pref.getString("token", "DEFAULT"); 

       OkHttpClient okHttpClient = new OkHttpClient(); 
       Request request = new Request.Builder().url(url).addHeader("Authorization", "Bearer " + acToken) 
         .build(); 

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

       return new WebResourceResponse(response.header("text/html", response.body().contentType().type()), // You can set something other as default content-type 
         response.header("content-encoding", "utf-8"), // Again, you can set another encoding as default 
         response.body().byteStream()); 


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

私を助けてください。どんな助けもありがとうございます。

+0

同じ問題に直面しています。あなたは解決策を見つけましたか? – Picci

+0

@Picci私のWebサービスAPI開発者は、テーブル要素のそれぞれにスタイルクラスを作成することで問題を解決しました。子クラスを介したCSS照会はWebビューにロードされないためです。その後、[link](https://github.com/delight-im/Android-AdvancedWebView)に変更しました。これはすばらしい図書館です。ただし、Webビューのすべてのリンクでヘッダーを使用することはできません。それは最初の要求に制限されています。これに言及するあなたの努力に感謝します。 #HappyToHelp #HappyCoding –

+0

@Picci実際に私のWebビューがテーブル形式をロードしていました –

答えて

3

AdvancedWebViewライブラリを使用して問題を解決してください。アンドロイドのデフォルトのwebviewではCSSの問題を処理できません。

また、Android webviewとAdvancedWebViewの両方が、webviewの最初のリクエストを除いてヘッダーを処理できません。特定のwebviewリクエストですべてのリンクにヘッダーを渡すことはできません。あなたの疑問を解決するためにこれを参照してくださいGithub Question

私のSO Questionのヘッダーの問題です。

誰かが上記のヘッダー受け渡し問題の解決策を見つけた場合は、解決策を自由に追加してください。ありがとうございました。

1

これは私のために働く。

WebViewClient wvc = new WebViewClient() { 

       @Override 
       public WebResourceResponse shouldInterceptRequest (WebView view, String url){ 
        try { 
         OkHttpClient httpClient = new OkHttpClient(); 
         com.squareup.okhttp.Request request = new com.squareup.okhttp.Request.Builder() 
           .url(url.trim()) 
           .addHeader("PIPPO", "PIPPO") 
           .build(); 
         com.squareup.okhttp.Response response = httpClient.newCall(request).execute(); 

         Log.d("TAG",response.header("content-type", "text/html")); 
         Log.d("TAG",response.header("content-encoding", "UTF-8")); 

         return new WebResourceResponse(
           null, 
           null, 
           response.body().byteStream() 
         ); 
         } catch (Exception e) { 
         //return null to tell WebView we failed to fetch it WebView should try again. 
         return null; 
        } 
      } 

私の唯一の懸念は、「問題の多い」デフォルトブラウザを搭載したスマートフォンでは、結果が壊れることがあることです。

+1

私はこのライブラリ[AdvancedWebView](https://github.com/delight-im/Android-AdvancedWebView)を使用して問題を解決しました。 –

+0

クール!ちゃんと覚えておきますよ – Picci

関連する問題