package android.source.tuangou.framework.web; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.source.tuangou.framework.Config; import android.source.tuangou.framework.base.BaseActivity; import android.source.tuangou.framework.util.LogUtil; import android.source.tuangou.framework.util.StringUtil; import android.webkit.WebView; import android.webkit.WebViewClient; import java.net.URL; import java.util.Arrays; import java.util.regex.Pattern; import org.json.JSONObject; public abstract class WebActivity extends BaseActivity { private String currentUrl; protected Handler mHandler; protected String requestJSON; private String title; protected WebView webView; public WebActivity(){ } //绑定Javascrip函数 private void bindJavascriptHook(){ (new ScriptHelper()).bindJavascriptObject(this); } //调用javascript public void callJS(String s){ String s1 = (new StringBuilder()).append("javascript:").append(s).toString(); System.out.println("callJS s1 = "+s1); webView.loadUrl(s1); if (Config.DEBUG.booleanValue()){ StringBuilder stringbuilder = (new StringBuilder()).append("Call js: "); String s2; if (s.length() > 101) s2 = s.substring(0, 100); else s2 = s; LogUtil.d(stringbuilder.append(s2).toString()); } } //调用javascript中的函数 public void callJSFunc(String s, String as[]){ System.out.println("callJSFunc s = "+s); for(int i = 0; i < as.length; i++){ System.out.println("callJSFunc as["+i+"] = "+as[i]); } StringBuilder stringbuilder = new StringBuilder(); StringBuilder stringbuilder1 = stringbuilder.append("if (typeof ").append(s).append(" == 'function')").append(s).append("("); String s1 = StringUtil.join(Arrays.asList(as), ","); StringBuilder stringbuilder2 = stringbuilder1.append(s1).append(")"); String s2 = stringbuilder.toString(); System.out.println("callJSFunc s2 = "+s2); callJS(s2); } public String getCurrentUrl() { return currentUrl; } public Handler getHandler() { return mHandler; } public String getQueryParams() { return requestJSON; } //获取webview public WebView getWebView(){ return webView; } protected abstract void initLayout(); //加载url函数 public void loadUrl(String s){ try { System.out.println("loadUrl = "+s); String s2; currentUrl = s; StringBuilder stringbuilder = new StringBuilder(); String s1 = Config.WEB_FILE_PREFIX; s2 = stringbuilder.append(s1).append(s).toString(); String s3 = (new URL(s2)).getQuery(); JSONObject jsonobject = new JSONObject(); System.out.println("s3 = "+s3); if (!StringUtil.isEmpty(s3).booleanValue()) { String as[] = Pattern.compile("&").split(s3); for(int i = 0; i < as.length; i++){ String s4 = as[i]; int k = s4.indexOf("="); int l = s4.indexOf("#"); if (l != -1) { int i1 = l + 1; String s5 = s4.substring(i1); JSONObject jsonobject1 = jsonobject.put("__anchor__", s5); } if (k != -1) { String s6 = s4.substring(0, k); String s7; if (l == -1) { int j1 = k + 1; s7 = s4.substring(j1); } else { int k1 = k + 1; s7 = s4.substring(k1, l); } if (!StringUtil.isEmpty(s6).booleanValue() && !StringUtil.isEmpty(s7).booleanValue()) { String s8 = Uri.decode(s7); JSONObject jsonobject2 = jsonobject.put(s6, s8); } } } } requestJSON = jsonobject.toString(); System.out.println("requestJSON = "+requestJSON); System.out.println("Config.DEBUG = "+Config.DEBUG); if (Config.DEBUG.booleanValue()) { LogUtil.d((new StringBuilder()).append("Load url: ").append(s2) .toString()); webView.clearCache(true); } System.out.println("s2 = "+s2); //webView加载url webView.loadUrl(s2); } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } return; } public void onCreate(Bundle bundle){ super.onCreate(bundle); Bundle bundle1 = getIntent().getExtras(); if (bundle1 != null) { String s = bundle1.getString("url"); currentUrl = s; String s1 = bundle1.getString("ui_title"); title = s1; } System.out.println("currentUrl = "+currentUrl); System.out.println("title = "+title); //创建webView对象 webView = new WebView(this); //初始化布局,初始化了顶部和添加了weiview控件 initLayout(); //setWebViewClient--表示要加载html,T8WebViewClient帮助WebView处理各种通知、请求事件 webView.setWebViewClient(new T8WebViewClient()); bindJavascriptHook(); //创建handler类 mHandler = new Handler(); //加载url if (!StringUtil.isEmpty(currentUrl).booleanValue()){ loadUrl(currentUrl); } //设置标题 if (!StringUtil.isEmpty(title).booleanValue()){ setUITitle(title); } } protected void onResume(){ super.onResume(); String as[] = new String[1]; as[0] = "false"; callJSFunc("_page_appeared", as); } public void setCurrentUrl(String s) { currentUrl = s; } public void setUITitle(String s) { setTitle(s); } public void setWebActivityProperty(String s, Object obj) { } /* * WebViewClient主要帮助WebView处理各种通知、请求事件的,比如: * * onLoadResource onPageStart onPageFinish onReceiveError onReceivedHttpAuthRequest * * */ final class T8WebViewClient extends WebViewClient{ final WebActivity this$0; //webview页面结束事件 public void onPageFinished(WebView webview, String s){ System.out.println("T8WebViewClient onPageFinished "); WebActivity webactivity = WebActivity.this; String as[] = new String[0]; webactivity.callJSFunc("_page_loaded", as); String as1[] = new String[1]; as1[0] = "true"; //webactivity.callJSFunc("_page_appeared", as1); } private T8WebViewClient(){ super(); this$0 = WebActivity.this; } } }