Pārlūkot izejas kodu

添加联通卡注入js测试

zengjiebin 7 gadi atpakaļ
vecāks
revīzija
0bc54aca41

+ 4 - 1
app/src/main/AndroidManifest.xml

@@ -438,10 +438,13 @@
             android:name="com.sheep.gamegroup.view.activity.ActPlayVideo"
             android:configChanges="orientation|keyboardHidden|navigation|screenSize"
             android:screenOrientation="user"
-            android:theme="@style/AppTheme.fullScreen" />
+            android:theme="@style/AppTheme.noTitleBar" />
         <activity
             android:name="com.sheep.gamegroup.view.activity.ActInputAndPickerImg"
             android:theme="@style/AppTheme.translucent" />
+        <activity
+            android:name="com.sheep.gamegroup.view.activity.ActOverrideJsWeb"
+            android:screenOrientation="portrait"/>
 
         <!-- 友盟start -->
         <meta-data

+ 16 - 1
app/src/main/java/com/sheep/gamegroup/util/Jump2View.java

@@ -42,7 +42,6 @@ import com.sheep.gamegroup.model.entity.VersionInfo;
 import com.sheep.gamegroup.model.entity.WebviewEntity;
 import com.sheep.gamegroup.model.entity.XianWanEntity;
 import com.sheep.gamegroup.model.util.SheepSubscriber;
-import com.sheep.gamegroup.view.activity.ActArticle;
 import com.sheep.gamegroup.view.activity.ActArticleComment;
 import com.sheep.gamegroup.view.activity.ActAudit;
 import com.sheep.gamegroup.view.activity.ActBindMobileRegister;
@@ -71,6 +70,7 @@ import com.sheep.gamegroup.view.activity.ActMyWelfare;
 import com.sheep.gamegroup.view.activity.ActNewAboutUs;
 import com.sheep.gamegroup.view.activity.ActNewbieTaskList;
 import com.sheep.gamegroup.view.activity.ActNotice;
+import com.sheep.gamegroup.view.activity.ActOverrideJsWeb;
 import com.sheep.gamegroup.view.activity.ActPay;
 import com.sheep.gamegroup.view.activity.ActPlayGameList;
 import com.sheep.gamegroup.view.activity.ActPlayGameRecommendList;
@@ -2216,4 +2216,19 @@ public class Jump2View {
     public void goActInputAndPickerImg(Activity activity, String label) {
         activity.startActivityForResult(DataUtil.putObject(new Intent(activity, ActInputAndPickerImg.class), label), RequestCodeConstants.REQUEST_CODE_GE_DATA);
     }
+
+    /**
+     * 进入覆盖js的Web界面
+     * @param activity
+     * @param title
+     * @param url
+     * @param jsUrl
+     */
+    public void goActOverrideJsWeb(Activity activity, String title, String url, String jsUrl) {
+        Intent intent = new Intent(activity, ActOverrideJsWeb.class);
+        intent.putExtra("title", title);
+        intent.putExtra("url", url);
+        intent.putExtra("jsUrl", jsUrl);
+        activity.startActivity(intent);
+    }
 }

+ 7 - 5
app/src/main/java/com/sheep/gamegroup/util/LogUtil.java

@@ -13,15 +13,17 @@ public class LogUtil {
      */
     private static boolean isDebug = true;
 
-    public static void println(Object... msgs) {
+    public static void println(Object... objects) {
         if (TestUtil.isTest()) {
-            for (int i = 0; i < msgs.length; i++) {
+            StringBuilder stringBuilder = new StringBuilder();
+            for (int i = 0; i < objects.length; i++) {
                 if (i != 0) {
-                    System.out.print(" ");
+                    stringBuilder.append(" ");
                 }
-                System.out.print(msgs[i]);
+                stringBuilder.append(objects[i]);
             }
-            System.out.println();
+            String msg = stringBuilder.toString();
+            Log.i("println", ViewUtil.BLOCK + "\n" + msg);
         }
     }
 

+ 7 - 1
app/src/main/java/com/sheep/gamegroup/util/TestUtil.java

@@ -232,7 +232,7 @@ public class TestUtil {
      */
     public static void test(final Activity activity) {
         final String[] items = {"复制token","复制打点数据","从jenkins下载小绵羊安装包","测试表情包",
-                "测试签名1","测试签名2","测试孔剑秋faq正式服",
+                "测试联通卡","测试联通卡2","测试签名1","测试签名2","测试孔剑秋faq正式服",
                 "跳转QQ1","跳转QQ2","跳转QQ3","跳转白白QQ","龙猫竞猜","龙猫竞猜-scheme",
                 "有米科技","手机型号测试","测试通知栏", "测试自定义通知栏","测试自定义通知栏2",
                 "开启通知栏权限0","开启通知栏权限1","开启通知栏权限2","开启通知栏权限3",
@@ -250,6 +250,12 @@ public class TestUtil {
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
                         switch (items[which]) {
+                            case "测试联通卡":
+                                Jump2View.getInstance().goActOverrideJsWeb(activity, items[which], "http://10.8.210.236:5000/#/", "http://10.8.210.236:5000/chart.js");
+                                break;
+                            case "测试联通卡2":
+                                Jump2View.getInstance().goActOverrideJsWeb(activity, items[which], "http://10.8.210.236:5000/#/", "http://10.8.220.248/shared//html/test.js");
+                                break;
                             case "测试孔剑秋faq正式服":
                                 Jump2View.getInstance().goWeb(activity, " http://10.8.210.236:8080/#/faq", items[which]);
                                 break;

+ 23 - 24
app/src/main/java/com/sheep/gamegroup/util/WebviewJs.java

@@ -1,14 +1,9 @@
 package com.sheep.gamegroup.util;
 
-import android.app.Activity;
-import android.os.Build;
 import android.text.TextUtils;
 import android.webkit.JavascriptInterface;
 
 import com.kfzs.duanduan.utils.ApkUtils;
-import com.sheep.gamegroup.event.BigEvent;
-import com.sheep.gamegroup.event.EventTypes;
-import com.sheep.gamegroup.greendao.download.DownLoadInfo;
 import com.sheep.jiuyan.samllsheep.SheepApp;
 import com.sheep.jiuyan.samllsheep.utils.ClassFileHelper;
 import com.sheep.jiuyan.samllsheep.utils.G;
@@ -17,8 +12,6 @@ import com.sheep.jiuyan.samllsheep.utils.SpUtils;
 import com.zhy.http.okhttp.OkHttpUtils;
 import com.zhy.http.okhttp.callback.FileCallBack;
 
-import org.greenrobot.eventbus.EventBus;
-
 import java.io.File;
 import java.util.Locale;
 
@@ -28,16 +21,14 @@ import okhttp3.Call;
  * Created by ljy on 2018/6/25.
  */
 
-public class WebviewJs {
-    private Activity activity;
+public class WebViewJs {
     private int taskId;
 
-    public WebviewJs(Activity activity) {
-        this.activity = activity;
+    public WebViewJs() {
+
     }
 
-    public WebviewJs(Activity activity, int taskId) {
-        this.activity = activity;
+    public WebViewJs(int taskId) {
         this.taskId = taskId;
     }
 
@@ -53,12 +44,12 @@ public class WebviewJs {
     @JavascriptInterface
     public void downloadFile(final String url, final String name) {
         //去下载
-        CommonUtil.getInstance().showDownLoad(activity, url, name);
+        CommonUtil.getInstance().showDownLoad(ActivityManager.getInstance().currentActivity(), url, name);
     }
 
     @JavascriptInterface
     public void startApp(String pkg, String cls) {
-        PackageUtil.startApp(activity, pkg);
+        PackageUtil.startApp(ActivityManager.getInstance().currentActivity(), pkg);
     }
 
     @JavascriptInterface
@@ -69,15 +60,15 @@ public class WebviewJs {
     public void gotoWeb(String url, String title) {
         if(!TextUtils.isEmpty(url)) {
             if (TextUtils.isEmpty(title)) {
-                Jump2View.getInstance().goWeb(activity, url);//启动浏览器h5
+                Jump2View.getInstance().goWeb(ActivityManager.getInstance().currentActivity(), url);//启动浏览器h5
             } else {
-                Jump2View.getInstance().goWeb(activity, url, title);//进入小绵羊h5界面
+                Jump2View.getInstance().goWeb(ActivityManager.getInstance().currentActivity(), url, title);//进入小绵羊h5界面
             }
         }
     }
     @JavascriptInterface
     public void gotoRecharge() {
-        Jump2View.getInstance().goRechargeAct(activity, "内部H5");//进入充值绵羊币界面
+        Jump2View.getInstance().goRechargeAct(ActivityManager.getInstance().currentActivity(), "内部H5");//进入充值绵羊币界面
     }
 
     @JavascriptInterface
@@ -86,21 +77,29 @@ public class WebviewJs {
     }
     @JavascriptInterface
     public String popShare(String url, String type) {
-        CommonUtil.getInstance().popShare(activity, url, type);
+        CommonUtil.getInstance().popShare(ActivityManager.getInstance().currentActivity(), url, type);
         return "";
     }
     @JavascriptInterface
     public String getHeader() {
-        return SpUtils.getToken(activity);
+        return SpUtils.getToken(SheepApp.getInstance());
     }
 
     @JavascriptInterface
     public String getWcUrl(String url) {
         if(!TextUtils.isEmpty(url)){
-            Jump2View.getInstance().goWeb(activity, url);
+            Jump2View.getInstance().goWeb(ActivityManager.getInstance().currentActivity(), url);
         }
         return "";
     }
+    @JavascriptInterface
+    public String getIMEI() {
+        return DeviceUtil.getDeviceId(SheepApp.getInstance());
+    }
+    @JavascriptInterface
+    public String getPhoneModel() {
+        return SysAppUtil.getSystemModel();
+    }
 
     @JavascriptInterface
     public int getTaskId(){
@@ -118,7 +117,7 @@ public class WebviewJs {
             return 0;
         }
 
-        return PackageUtil.isAppInstalled(activity, packName) ? 1 : 0;
+        return PackageUtil.isAppInstalled(ActivityManager.getInstance().currentActivity(), packName) ? 1 : 0;
     }
 
     @JavascriptInterface
@@ -146,7 +145,7 @@ public class WebviewJs {
             G.showToast("连接地址为空");
             return 0;
         }
-        Jump2View.getInstance().goWeb(activity, url);
+        Jump2View.getInstance().goWeb(ActivityManager.getInstance().currentActivity(), url);
         return 0;
     }
 
@@ -163,7 +162,7 @@ public class WebviewJs {
             @Override
             public void onResponse(File response, int id) {
                 if(response.getAbsolutePath().endsWith(".apk")){
-                    ApkUtils.installApk(activity, response.getAbsolutePath());
+                    ApkUtils.installApk(ActivityManager.getInstance().currentActivity(), response.getAbsolutePath());
                 }
             }
         });

+ 2 - 5
app/src/main/java/com/sheep/gamegroup/view/activity/ActCreditCardWeb.java

@@ -1,13 +1,12 @@
 package com.sheep.gamegroup.view.activity;
 
 import android.os.Build;
-import android.os.Bundle;
 import android.view.View;
 import android.widget.TextView;
 
 import com.sheep.gamegroup.absBase.BaseActivity;
 import com.sheep.gamegroup.model.entity.CreditCard;
-import com.sheep.gamegroup.util.WebviewJs;
+import com.sheep.gamegroup.util.WebViewJs;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
@@ -21,8 +20,6 @@ import com.zhy.http.okhttp.callback.StringCallback;
 import butterknife.BindView;
 import okhttp3.Call;
 
-import static com.sheep.gamegroup.util.Jump2View.EXTRA_WEBVIEW_NO_TITLE;
-
 
 /**
  * 信用卡申请web
@@ -138,7 +135,7 @@ public class ActCreditCardWeb extends BaseActivity {
         webViewSettings.setDatabasePath(getApplicationContext().getCacheDir().getAbsolutePath());
 
         webViewSettings.setJavaScriptEnabled(true);
-        mWebView.addJavascriptInterface(new WebviewJs(ActCreditCardWeb.this, creditCard.getRelease_id()), "kfzsjs");
+        mWebView.addJavascriptInterface(new WebViewJs(creditCard.getRelease_id()), "kfzsjs");
         mWebView.loadUrl(creditCard.getLoadUrl());
     }
 

+ 166 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/ActOverrideJsWeb.java

@@ -0,0 +1,166 @@
+package com.sheep.gamegroup.view.activity;
+
+import android.content.Intent;
+import android.os.Build;
+import android.view.View;
+import android.widget.TextView;
+
+import com.sheep.gamegroup.absBase.BaseActivity;
+import com.sheep.gamegroup.util.LogUtil;
+import com.sheep.gamegroup.util.WebViewJs;
+import com.sheep.jiuyan.samllsheep.BuildConfig;
+import com.sheep.jiuyan.samllsheep.R;
+import com.sheep.jiuyan.samllsheep.utils.G;
+import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
+import com.tencent.smtt.sdk.WebChromeClient;
+import com.tencent.smtt.sdk.WebSettings;
+import com.tencent.smtt.sdk.WebView;
+import com.tencent.smtt.sdk.WebViewClient;
+import com.zhy.http.okhttp.OkHttpUtils;
+import com.zhy.http.okhttp.callback.StringCallback;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+
+import butterknife.BindView;
+import okhttp3.Call;
+
+
+/**
+ * 覆盖js 的 web
+ * Created by zengjiebin on 2018/11/21.
+ */
+public class ActOverrideJsWeb extends BaseActivity {
+
+    @BindView(R.id.webview)
+    WebView mWebView;
+    @BindView(R.id.tv_next)
+    TextView tv_next;
+
+    private WebSettings webViewSettings;
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.activity_guide_on_hook;
+    }
+
+    @Override
+    public void initView() {
+        Intent intent = getIntent();
+        String title = intent.getStringExtra("title");
+        String url = intent.getStringExtra("url");
+        String jsUrl = intent.getStringExtra("jsUrl");
+        TitleBarUtils
+                .getInstance()
+                .setTitle(this, title)
+                .setTitleFinish(this);
+
+        webViewSettings = mWebView.getSettings();
+        webViewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+//            webViewSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
+        }
+        tv_next.setVisibility(View.GONE);
+        initJsData(url, jsUrl);
+    }
+
+    @Override
+    public void initListener() {
+
+    }
+
+    @Override
+    public void initData() {
+
+    }
+
+    private void initJsData(final String url, String jsUrl) {
+        OkHttpUtils.get()
+                .url(jsUrl)
+                .build()
+                .execute(new StringCallback() {
+                    @Override
+                    public void onError(Call call, Exception e, int id) {
+                        G.showToast( R.string.service_data_error);
+                    }
+
+                    @Override
+                    public void onResponse(String response, int id) {
+                        js = response;
+                        loadUrl(url);
+                    }
+                });
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        if (mWebView != null) {
+            mWebView.setVisibility(View.GONE);
+            mWebView.removeAllViews();
+            mWebView.destroy();
+        }
+    }
+
+    private void loadUrl(String url) {
+        mWebView.setWebChromeClient(new WebChromeClient(){
+            @Override
+            public void onReceivedTitle(WebView view, String title) {
+                super.onReceivedTitle(view, title);
+                TitleBarUtils
+                        .getInstance()
+                        .setTitle(ActOverrideJsWeb.this, title);
+            }
+        });
+        mWebView.setWebViewClient(new WebViewClient() {
+            @Override
+            public boolean shouldOverrideUrlLoading(WebView view, String url) {
+                try {
+                    view.loadUrl(url);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                return true;
+            }
+            @Override
+            public void onPageFinished(WebView view, String url) {
+                super.onPageFinished(view, url);
+                try {
+                    LogUtil.println("ActOverrideJsWeb", "onPageFinished", "url", "=", url, "\ndecode_url", "=",  URLDecoder.decode(url, "utf-8"));
+                } catch (UnsupportedEncodingException e) {
+                    e.printStackTrace();
+                }
+                loadJs();
+//                loadTestJs();
+            }
+        });
+
+        // 开启DOM缓存,开启LocalStorage存储(html5的本地存储方式)
+        webViewSettings.setDomStorageEnabled(true);
+        webViewSettings.setDatabaseEnabled(true);
+        webViewSettings.setDatabasePath(getApplicationContext().getCacheDir().getAbsolutePath());
+
+        webViewSettings.setJavaScriptEnabled(true);
+        mWebView.addJavascriptInterface(new WebViewJs(), "kfzsjs");
+        mWebView.loadUrl(url);
+    }
+
+    @Override
+    public void onBackPressed() {
+        if(mWebView.canGoBack()){
+            mWebView.goBack();
+            return;
+        }
+        this.finish();
+    }
+    // 注入js函数监听
+    public void loadJs() {
+        mWebView.loadUrl("javascript:"+getJs());
+        LogUtil.println("ActOverrideJsWeb", "loadJs", js);
+    }
+    private String js;
+    private String getJs(){
+        String testJsStart = "alert('成功注入');";
+        return BuildConfig.DEBUG ? testJsStart + "\n" + js : js;
+    }
+}

+ 2 - 4
app/src/main/java/com/sheep/gamegroup/view/activity/ActXianWanWeb.java

@@ -13,7 +13,7 @@ import com.sheep.gamegroup.util.CommonUtil;
 import com.sheep.gamegroup.util.DataUtil;
 import com.sheep.gamegroup.util.DeviceIDUtil;
 import com.sheep.gamegroup.util.ViewUtil;
-import com.sheep.gamegroup.util.WebviewJs;
+import com.sheep.gamegroup.util.WebViewJs;
 import com.sheep.jiuyan.samllsheep.R;
 import com.sheep.jiuyan.samllsheep.utils.G;
 import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
@@ -29,8 +29,6 @@ import java.util.Locale;
 import butterknife.BindView;
 import okhttp3.Call;
 
-import static com.sheep.gamegroup.util.Jump2View.EXTRA_WEBVIEW_NO_TITLE;
-
 
 /**
  * 闲玩
@@ -149,7 +147,7 @@ public class ActXianWanWeb extends BaseActivity {
             }
         });
         webViewSettings.setJavaScriptEnabled(true);
-        mWebView.addJavascriptInterface(new WebviewJs(activity, 0), "android");
+        mWebView.addJavascriptInterface(new WebViewJs(), "android");
         mWebView.loadUrl(assemblyData());
 
         mWebView.setOnKeyListener(new View.OnKeyListener() {

+ 7 - 1
app/src/main/res/values/gamegroup_styles.xml

@@ -108,13 +108,19 @@
         <item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->
         <item name="android:backgroundDimAmount">0.7</item><!--透明度 0.0f到1.0f之间。1.0完全不透明,0.0f完全透明-->
     </style>
+    <!--无标题-->
+    <style name="AppTheme.noTitleBar" parent="@style/AppTheme">
+        <!--是否去除标题 -->  
+        <item name="android:windowNoTitle">true</item>  
+    </style>
     <!--全屏-->
     <style name="AppTheme.fullScreen" parent="@style/AppTheme">
         <!--是否去除标题 -->  
         <item name="android:windowNoTitle">true</item>  
+        <item name="android:windowFullscreen">true</item>  
     </style>
     <!--全屏透明背景-->
-    <style name="AppTheme.translucent" parent="@style/AppTheme.fullScreen">
+    <style name="AppTheme.translucent" parent="@style/AppTheme.noTitleBar">
          <!--背景颜色及和透明程度-->  
         <item name="android:windowBackground">@color/transparent</item>  
         <!--是否去除边框-->