Bläddra i källkod

1.修改Android Apex CRM自定义WebView。

Pen Li 7 år sedan
förälder
incheckning
b7b7e26a28

+ 1 - 11
ApexDrivers/apexcrm/src/main/java/com/usai/apex/apexcrm/MainActivity.java

@@ -22,17 +22,7 @@ public class MainActivity extends AppCompatActivity {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
 
-        RAWebView webView = RAWebView.findWebViewByIdWithDelegate(this, R.id.webview, new RAWebView.RAWebViewDelegate() {
-            @Override
-            public void webViewPerformJSAction(RAWebView webView, String action, String params) {
-
-            }
-
-            @Override
-            public boolean webViewCanResponseJSAction(RAWebView webView, String action) {
-                return true;
-            }
-        });
+        RAWebView webView = RAWebView.findWebViewByIdWithDelegate(this, R.id.webview);
 
         webView.addJSInterface(new RAJSInterface(), "RAJSInterface");
 

+ 57 - 111
ApexDrivers/apexcrm/src/main/java/com/usai/apex/apexcrm/RAWebView.java

@@ -11,10 +11,8 @@ import android.webkit.ConsoleMessage;
 import android.webkit.JsPromptResult;
 import android.webkit.JsResult;
 import android.webkit.WebChromeClient;
-import android.webkit.WebResourceRequest;
 import android.webkit.WebSettings;
 import android.webkit.WebView;
-import android.webkit.WebViewClient;
 import android.widget.RelativeLayout;
 
 public class RAWebView extends RelativeLayout {
@@ -23,8 +21,9 @@ public class RAWebView extends RelativeLayout {
     private WebView mWebView;
     private Context mCtx;
     private RAWebView self = this;
-    private RAWebViewDelegate delegate;
 
+    /**
+    private RAWebViewDelegate delegate;
     public interface RAWebViewDelegate {
         void webViewPerformJSAction(RAWebView webView, String action, String params);
         boolean webViewCanResponseJSAction(RAWebView webView, String action);
@@ -51,6 +50,28 @@ public class RAWebView extends RelativeLayout {
         }
         return null;
     }
+     */
+
+    public static RAWebView findWebViewByIdWithDelegate(Object object, int id) {
+
+        if (object != null) {
+
+            RAWebView webView = null;
+            if (object instanceof AppCompatActivity) {
+
+                webView = ((AppCompatActivity)object).findViewById(id);
+            } else if (object instanceof View) {
+
+                webView = ((View)object).findViewById(id);
+            }
+
+            if (webView != null) {
+                webView.init();
+                return webView;
+            }
+        }
+        return null;
+    }
 
     public RAWebView(Context context) {
         super(context);
@@ -73,84 +94,15 @@ public class RAWebView extends RelativeLayout {
     }
 
     private void initWebSetting() {
-        //声明WebSettings子类
-        WebSettings webSettings = mWebView.getSettings();
-
-        //如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
-        webSettings.setJavaScriptEnabled(true);
-//        // 若加载的 html 里有JS 在执行动画等操作,会造成资源浪费(CPU、电量)
-//        // 在 onStop 和 onResume 里分别把 setJavaScriptEnabled() 给设置成 false 和 true 即可
-//
-//        //设置自适应屏幕,两者合用
-//        webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
-//        webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
-//
-//        //缩放操作
-//        webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
-//        webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
-//        webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
-//
-//        //其他细节操作
-//        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); //关闭webview中缓存
-//        webSettings.setAllowFileAccess(true); //设置可以访问文件
-//        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
-//        webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
-//        webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
-
-        hackWebJSMethod();
-//        hackWebURL(); // 似乎不起作用
-    }
+        if (mWebView != null) {
+            //声明WebSettings子类
+            WebSettings webSettings = mWebView.getSettings();
 
-    private boolean canHack(String message) {
+            //如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
+            webSettings.setJavaScriptEnabled(true);
 
-        if (delegate != null) {
-            return delegate.webViewCanResponseJSAction(self, message);
+            hackWebJSMethod();
         }
-
-        return false;
-    }
-
-    private void hackWebJSMethod() {
-        mWebView.setWebChromeClient(new RAWebChromeClient());
-    }
-
-    private void hackWebURL() {
-        mWebView.setWebViewClient(new WebViewClient() {
-
-            @Override
-            public boolean shouldOverrideUrlLoading(WebView view, String url) {
-
-                if (canHack(url)) {
-
-                    Log.d(TAG, "shouldOverrideUrlLoading: " + url);
-                    if (delegate != null) {
-                        delegate.webViewPerformJSAction(self, url, null);
-                    }
-
-                    return true;
-                }
-
-                return super.shouldOverrideUrlLoading(view, url);
-            }
-
-            @Override
-            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
-
-                String url = request.getUrl().toString();
-                if (canHack(url)) {
-
-                    Log.d(TAG, "shouldOverrideUrlLoading: " + url);
-                    if (delegate != null) {
-                        delegate.webViewPerformJSAction(self, url, null);
-                    }
-
-                    return true;
-                }
-
-                return super.shouldOverrideUrlLoading(view, request);
-            }
-        });
-
     }
 
     public void init() {
@@ -164,18 +116,42 @@ public class RAWebView extends RelativeLayout {
     }
 
     public void loadUrl(String url) {
-        mWebView.loadUrl(url);
+        if (mWebView != null) {
+            mWebView.loadUrl(url);
+        }
     }
 
     @SuppressLint("JavascriptInterface")
     public void addJSInterface(Object object, String name) {
-        mWebView.addJavascriptInterface(object, name);
+        if (mWebView != null) {
+            mWebView.addJavascriptInterface(object, name);
+        }
     }
 
     public void removeJSInterface(String name) {
-        mWebView.removeJavascriptInterface(name);
+        if (mWebView != null) {
+            mWebView.removeJavascriptInterface(name);
+        }
     }
 
+    /**
+
+     private boolean canHack(String message) {
+
+        if (delegate != null) {
+            return delegate.webViewCanResponseJSAction(self, message);
+        }
+
+        return false;
+    }
+     */
+
+    private void hackWebJSMethod() {
+        mWebView.setWebChromeClient(new RAWebChromeClient());
+    }
+
+
+
     /**
      * Hack Method
      * */
@@ -185,26 +161,12 @@ public class RAWebView extends RelativeLayout {
         @Override
         public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
 
-            Log.d(TAG, "onJsPrompt: " + url + " Msg: " + message + " Value: " + defaultValue);
-
-            if (canHack(message)) {
-
-                return false;
-            }
-
             return super.onJsPrompt(view, url, message, defaultValue, result);
         }
 
         @Override
         public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
 
-            Log.d(TAG, "onJsAlert: " + url + " Msg: " + message);
-
-            if(canHack(message)) {
-
-                return false;
-            }
-
             return super.onJsAlert(view, url, message, result);
 
         }
@@ -212,13 +174,6 @@ public class RAWebView extends RelativeLayout {
         @Override
         public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
 
-            Log.d(TAG, "onJsConfirm: " + url + " Msg: " + message);
-
-            if(canHack(message)) {
-
-                return false;
-            }
-
             return super.onJsConfirm(view, url, message, result);
 
         }
@@ -226,15 +181,6 @@ public class RAWebView extends RelativeLayout {
         @Override
         public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
 
-            String message = consoleMessage.message();
-
-            Log.d(TAG, "onConsoleMessage: " + message);
-
-            if(canHack(message)) {
-
-                return false;
-            }
-
             return super.onConsoleMessage(consoleMessage);
 
         }