package com.roboo.qiushibaike.fragment; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import android.annotation.SuppressLint; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebChromeClient; import android.webkit.WebSettings.TextSize; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; import android.widget.TextView; import com.roboo.qiushibaike.R; import com.roboo.qiushibaike.model.BaseItem; import com.roboo.qiushibaike.model.CSDNItem; import com.roboo.qiushibaike.model.ChuanYiItem; import com.roboo.qiushibaike.model.KJFMItem; import com.roboo.qiushibaike.view.RoundProgressBar; @SuppressLint("SetJavaScriptEnabled") public class WebViewFragment extends Fragment { private WebView mWebView; private static final String ARG_ITEM = "item"; private BaseItem mBaseItem; private RoundProgressBar mRoundProgressBar; private ProgressBar mProgressBar; private TextView mTextView; public static WebViewFragment newInstance(Object item) { Bundle bundle = new Bundle(); if (null != item) { if (item instanceof BaseItem) { bundle.putSerializable(ARG_ITEM, (BaseItem) item); } } WebViewFragment mainFragment = new WebViewFragment(); mainFragment.setArguments(bundle); return mainFragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Object object = getArguments().getSerializable(ARG_ITEM); if (object instanceof BaseItem) { mBaseItem = (BaseItem) object; } View view = inflater.inflate(R.layout.fragment_web_view, null); mRoundProgressBar = (RoundProgressBar) view.findViewById(R.id.roundProgressBar); mWebView = (WebView) view.findViewById(R.id.wv_webview); mTextView = (TextView) view.findViewById(R.id.tv_text); mProgressBar = (ProgressBar) view.findViewById(R.id.pb_progress_bar); mRoundProgressBar.setVisibility(View.INVISIBLE); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initWebView(); if (mBaseItem instanceof ChuanYiItem) { new WebContentTask().execute(); } else { this.mWebView.loadUrl(mBaseItem.url); } } @SuppressWarnings("deprecation") private void initWebView() { this.mWebView.getSettings().setJavaScriptEnabled(true); this.mWebView.getSettings().setDefaultTextEncodingName("UTF-8"); // this.mWebView.setInitialScale(100); // this.mWebView.getSettings().setUseWideViewPort(true); this.mWebView.getSettings().setLoadWithOverviewMode(true); this.mWebView.getSettings().setTextSize(TextSize.NORMAL); initWebViewClient(); } private void initWebViewClient() { this.mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } }); this.mWebView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { mProgressBar.setVisibility(View.GONE); mTextView.setVisibility(View.GONE); } super.onProgressChanged(view, newProgress); } }); } private class WebContentTask extends AsyncTask<Void, Float, String> { @Override protected String doInBackground(Void... params) { if (mBaseItem instanceof ChuanYiItem) { return getChuanYiHtml(); } else if (mBaseItem instanceof CSDNItem) { return getCsdnHtml(); } else if(mBaseItem instanceof KJFMItem) { return getKjfmHtml(); } return null; } @Override protected void onPostExecute(String result) { if (null != result) { mWebView.loadData(result, "text/html; charset=UTF-8", null); } } } private String getKjfmHtml() { String data = null; try { Document document = Jsoup.connect(mBaseItem.url).timeout(20000).get(); Element divTag = document.getElementById("xs-post"); if (null != divTag) { data = divTag.html(); } data = new String(data.getBytes(), "UTF-8"); } catch (IOException e) { e.printStackTrace(); } return data; } private String getCsdnHtml() { String data = null; try { Document document = Jsoup.connect(mBaseItem.url).timeout(20000).get(); Elements divTags = document.getElementsByClass("details"); if (null != divTags) { data = divTags.html(); } if (null == data) { data = document.html(); } data = new String(data.getBytes(), "UTF-8"); } catch (IOException e) { e.printStackTrace(); } return data; } private String getChuanYiHtml() { String data = null; try { Document document = Jsoup.connect(mBaseItem.url).timeout(20000).get(); Element bodyTag = document.getElementsByTag("body").get(0); Elements divTags = bodyTag.getElementsByTag("div"); if (divTags != null && divTags.size() > 2) { Element tmp = divTags.get(0); Element tmp1 = divTags.get(1); tmp.getElementsByTag("img").get(0).attr("src", "http://www.chong4.com.cn/mobile/style/logo.gif"); tmp1.getElementsByClass("m_more").get(0).html(""); Elements pTags = tmp1.getElementsByClass("m_content").get(0).getElementsByTag("p"); for (Element e : pTags) { if (e.getElementsByTag("a") != null && e.getElementsByTag("a").size() > 0) { e.getElementsByTag("a").get(0).html(""); } e.attr("style", "text-align:left;"); } data = tmp.html() + tmp1.html(); } data = new String(data.getBytes(), "UTF-8"); } catch (IOException e) { e.printStackTrace(); } return data; } }