xml地图|网站地图|网站标签 [设为首页] [加入收藏]

【皇家赌场游戏】强大灵活的WebView代理库,Web

来源:http://www.ccidsi.com 作者:集成介绍 人气:193 发布时间:2020-03-15
摘要:完结刷新回弹作用 得以完结JS通讯文件上传 webview下载文件 WebView加载页面空白 1.android 5.0事情未发生前宽容使用 http 和 https契约,在5.0之后.混合央浼http/https 有的会招致页面空白 急需设
  1. 完结刷新回弹作用
  2. 得以完结JS通讯文件上传
  3. webview下载文件
WebView加载页面空白

1.android 5.0事情未发生前宽容使用 http 和 https 契约,在5.0之后.混合央浼http/https 有的会招致页面空白
急需设置mode为WebSettings.MIXED_CONTENT_ALWAYS_ALLOW , 0;

webSetting.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

WebViewClient的有些情势回调,作用

mWebView.setWebViewClient(new WebViewClient() {
     /**
      * Android 6.0之后才能使用
      * 加载错误的回调
      */
     @Override
      public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
          super.onReceivedHttpError(view, request, errorResponse);

      }

     /**
      * 防止加载网页时调起系统浏览器
      */
     public boolean shouldOverrideUrlLoading(WebView view, String url) {
          view.loadUrl(url);
          return true;
    }
     /**
      * 协议认证失败处理. proceed() 表示全部通过
      * 5.0之后默认返回的是cancel(), 需要修改为proceed(),
      */
     @Override
     public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) {
          sslErrorHandler.proceed();
     }

     //页面加载完成回调
    @Override
     public void onPageFinished(WebView webView, String s) {

     }
}

getHeight(State of Qatar或许getBottom(卡塔尔(قطر‎方法都回到当前WebView 那几个容器的可观

API 详解

.setWebParent(frameLayout, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT))内存泄漏不用担心,已经在内部处理了 @Override public void destroy() { removeAllViewsInLayout(); ViewParent parent = getParent(); if (parent instanceof ViewGroup) {//从父容器中移除webview ((ViewGroup) parent).removeAllViewsInLayout(); } releaseConfigCallback(); super.destroy(); }

如若假定用x5的webview要求在application中调用此方法 PrimWeb.init; 初步化x5

//使用库中X5的webview.setWebViewType(PrimWeb.WebViewType.X5)//使用库中Android的webview.setWebViewType(PrimWeb.WebViewType.Android)public enum WebViewType { Android, X5}

primWeb.getJsInterface().addJavaObject(new MyJavaObject(),"jsAgent")/** 注入js脚本 */public class MyJavaObject { @JavascriptInterface public void login(String data) { } }

primWeb.getCallJsLoader().callJS("jsMethod");primWeb.getCallJsLoader().callJS("callByAndroidParam", 1234);primWeb.getCallJsLoader().callJs("callByAndroidMoreParams", agentValueCallback, getJson(), "prim", true);//可传多个参数,可使用高级的API@RequiresApi(Build.VERSION_CODES.KITKAT)void callJs(String method, AgentValueCallback<String> callback, String... params);@RequiresApi(Build.VERSION_CODES.KITKAT)void callJs(String method, AgentValueCallback<String> callback);void callJS(String method, String... params);void callJS(String method);

.setAgentWebSetting(new X5DefaultWebSettingpublic class X5DefaultWebSetting extends BaseAgentWebSetting<WebSettings> { private Context context; private static final String APP_CACAHE_DIRNAME = "/webcache"; public X5DefaultWebSetting(Context context) { this.context = context; } @SuppressLint("SetJavaScriptEnabled") @Override protected void toSetting(WebSettings webSetting) { webSetting.setJavaScriptEnabled; webSetting.setJavaScriptCanOpenWindowsAutomatically; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { // 通过 file url 加载的 Javascript 读取其他的本地文件 .建议关闭 webSetting.setAllowFileAccessFromFileURLs; // 允许通过 file url 加载的 Javascript 可以访问其他的源,包括其他的文件和 http,https 等其他的源 webSetting.setAllowUniversalAccessFromFileURLs; } } ...... }

.setAgentWebViewClient(agentWebViewClient)AgentWebViewClient agentWebViewClient = new AgentWebViewClient() { @Override public boolean shouldOverrideUrlLoading(IAgentWebView view, String url) { Log.e(TAG, "shouldOverrideUrlLoading: "   url); return super.shouldOverrideUrlLoading(view, url); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override public boolean shouldOverrideUrlLoading(IAgentWebView view, WebResourceRequest request) { Log.e(TAG, "shouldOverrideUrlLoading: WebResourceRequest --> "   request.getUrl; return super.shouldOverrideUrlLoading(view, request); }};

 .setAgentWebChromeClient(agentChromeClient)AgentChromeClient agentChromeClient = new AgentChromeClient() { @Override public void onReceivedTitle(View webView, String s) { super.onReceivedTitle(webView, s); if (actionBar != null) { actionBar.setTitle; } } };

.alwaysOpenOtherPage

关闭进度指示器:.colseTopIndicator()设置默认的进度指示器:.useDefaultTopIndicator()如果想改变指示器的颜色可以调用如下:.useDefaultTopIndicator(@ColorInt int color).useDefaultTopIndicator(@NonNull String color)如果想改变指示器的高可以调用如下:.useDefaultTopIndicator(@ColorInt int color, int height)如果想自定义指示器可以调用如下:主要需要继承BaseIndicatorView.useCustomTopIndicator(@NonNull BaseIndicatorView indicatorView)

设置默认的UI.useDefaultUI()可以设置布局的layout和点击的id.useCustomUI(@LayoutRes int errorLayout, @IdRes int errorClickId)可以设置为一个view.useCustomUI(@NonNull View errorView)

 primWeb.getUrlLoader().loadUrl(); primWeb.getUrlLoader().reload(); primWeb.getUrlLoader().stopLoading();

 @Override protected void onResume() { super.onResume(); primWeb.webLifeCycle().onResume(); } @Override protected void onPause() { super.onPause(); primWeb.webLifeCycle().onPause(); } @Override protected void onDestroy() { super.onDestroy(); primWeb.webLifeCycle().onDestory(); }

 //设置监听 .setListenerCheckJsFunction //要检查的js方法 primWeb.getCallJsLoader().checkJsMethod("returnBackHandles"); @Override public void jsFunExit(Object data) { Toast.makeText(getActivity(), data.toString()   "方法存在", Toast.LENGTH_SHORT).show(); } @Override public void jsFunNoExit(Object data) { Toast.makeText(getActivity(), data.toString()   "方法不存在", Toast.LENGTH_SHORT).show(); }

当中是那样管理的,笔者要好写了叁个js方法,来特意剖断, 具体请看BaseCallJsLoader

 @Override public void checkJsMethod(String method) { StringBuilder sb = new StringBuilder(); sb.append("function checkJsFunction(){ if .append .append(" != "undefined" && typeof ") .append .append(" == "function")") .append("{console.log .append .append .append("checkJsBridge['jsFunctionExit'] .append .append("if(typeof checkJsBridge == "undefined") return false;") .append("checkJsBridge['jsFunctionNo']; call("javascript:"   sb.toString()   ";checkJsFunction; }

PrimWeb库已经默认实现了文件上传如果想禁止文件上传可以设置:.setAllowUploadFile如果想使用第三方文件选择库上传文件设置:.setUpdateInvokThrid同时具体的上传逻辑需要自己完成,具体的可以看Demo@Override public void jsOpenVideos() { Log.e(TAG, "jsOpenVideos: "); PrimPicker.with(WebFragment.this) .choose(MimeType.ofVideo .setMaxSelected .setImageLoader(new MyImageLoad .setShowSingleMediaType .setCapture .setSpanCount .lastGo; } @Override public void jsOpenPick() { PrimPicker.with(WebFragment.this) .choose(MimeType.ofImage .setMaxSelected .setImageLoader(new MyImageLoad .setShowSingleMediaType .setCapture .setSpanCount .lastGo; } private ValueCallback<Uri[]> agentValueCallbacks; private ValueCallback<Uri> agentValueCallback; AgentChromeClient agentChromeClient = new AgentChromeClient() { @Override public boolean onShowFileChooser(View webView, ValueCallback<Uri[]> valueCallback, com.tencent.smtt.sdk.WebChromeClient.FileChooserParams fileChooserParams) { agentValueCallbacks = valueCallback; //注意监听需要写在这里 否则监听有时候会收不到 primWeb.setThriedChooserListener(WebFragment.this); return super.onShowFileChooser(webView, valueCallback, fileChooserParams); } @Override public void openFileChooser(ValueCallback<Uri> valueCallback) { agentValueCallback = valueCallback; primWeb.setThriedChooserListener(WebFragment.this); super.openFileChooser(valueCallback); } @Override public void openFileChooser(ValueCallback<Uri> valueCallback, String acceptType) { agentValueCallback = valueCallback; primWeb.setThriedChooserListener(WebFragment.this); super.openFileChooser(valueCallback, acceptType); } @Override public void openFileChooser(ValueCallback<Uri> valueCallback, String acceptType, String capture) { agentValueCallback = valueCallback; primWeb.setThriedChooserListener(WebFragment.this); super.openFileChooser(valueCallback, acceptType, capture); } }; @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.e(TAG, "onActivityResult: requestCode --> "   requestCode   " | resultCode --> "   resultCode); if (resultCode == RESULT_CANCELED && requestCode == 1001) { cancelFilePathCallback(); } else if (resultCode == RESULT_OK && requestCode == 1001) { uploadImgVideo(PrimPicker.obtainUriResult.get; } } private void uploadImgVideo { Uri result = uri; Uri[] results = new Uri[]{uri}; if (agentValueCallbacks != null) { agentValueCallbacks.onReceiveValue; agentValueCallbacks = null; } else if (agentValueCallback != null) { if (result == null) { return; } agentValueCallback.onReceiveValue; agentValueCallback = null; } } private void cancelFilePathCallback() { if (agentValueCallback != null) { agentValueCallback.onReceiveValue; agentValueCallback = null; } else if (agentValueCallbacks != null) { agentValueCallbacks.onReceiveValue; agentValueCallbacks = null; } }

返回键的回退简化: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (primWeb.handlerKeyEvent(keyCode, event)) { return true; } return super.onKeyDown(keyCode, event); } 返回按钮的回退简化:if (!primWeb.handlerBack { this.finish(); }

皇家赌场游戏 1有怎么着难点能够加此群提问

2.Crosswalk传闻种种通畅、强盛,且Cordova在新的版本在这之中也将暗许帮忙克罗斯walk,权且没动用过
参考

9.在WebView加入 flash支持:

PrimWeb.with(getActivity .setWebParent(webParent, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)) .useDefaultUI() .useDefaultTopIndicator() .setWebViewType(PrimWeb.WebViewType.X5) .setListenerCheckJsFunction .buildWeb() .lastGo() .launch;
TencentX5内核WebView轻松使用

手提式有线电电话机供给有X5内核服务,使用过QQ恐怕Wechat,只怕本身下载安装X5服务

1) 速度快:相比系统webview的网页打开速度有30 %的提升;
2) 省流量:使用云端优化技术使流量节省20 %;
3) 更安全:安全问题可以在24小时内修复;
4) 更稳定:经过亿级用户的使用考验,CRASH率低于0.15%;
5) 兼容好:无系统内核的碎片化问题,更少的兼容性问题;

...

选用注意:
1.申请权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

2.假若是六11个人的无绳电话机,无法加载X5标题一举成功

(1State of Qatar张开对应module中的build.gradle文件,在文书的android{}中的defaultConfig{}里(若无defaultConfig{}则手动加多卡塔尔(قطر‎增加如下配置: ndk{abiFilters "armeabi"},要是布署后编写翻译报错,那么要求在gradle.properties文件中丰盛Android.useDeprecatedNdk=true;
(2卡塔尔国寻觅build.gradle中配备的so加载目录:jniLibs.srcDir:customerDir,若无该项配置则so加载目录默以为:src/main/jniLibs,必要将.so文件都停放在so加载目录的armeabi文件夹下(未有该目录则新建三个,AP中从不使用到.so文件则供给拷贝自便二个34个人的so文件到该目录下,若无切合的so能够到官方网站http://x5.tencent.com/tbs/sdk.html下载官方网站“SDK接入示例“,拷贝对应目录下的liblbs.so文件卡塔尔,so加载目录下不要有此外以”armeabi“初步的文书夹。

3.要求在AppLication 的 onCreate(卡塔尔国方法里面初始化

QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
            @Override
            public void onViewInitFinished(boolean arg0) {
                //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
                LogUtils.aLog().d( "x5內核初始化 is "   arg0);
            }

            @Override
            public void onCoreInitFinished() {
            }
        };
        //x5内核初始化接口
        QbSdk.initX5Environment(getApplicationContext(),  cb);

4.安装有个别参数就能够采取

        RelativeLayout rootView = (RelativeLayout) findViewById(R.id.activity_show_pic);
        mWebView = new WebView(App.getInstance().getContext());
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(-1, -1);
        mWebView.setLayoutParams(layoutParams);
        mWebView.setVisibility(View.GONE);
        rootView.addView(mWebView);

        WebSettings webSetting = mWebView.getSettings();
        webSetting.setJavaScriptEnabled(true);
        webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
        webSetting.setAllowFileAccess(true);
        webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        webSetting.setSupportZoom(true);
        webSetting.setBuiltInZoomControls(true);
        webSetting.setUseWideViewPort(true);
        webSetting.setMixedContentMode(0); //设置协议支持混合
        webSetting.setSupportMultipleWindows(true);
        webSetting.setAppCacheEnabled(true);
        webSetting.setDomStorageEnabled(true);
        webSetting.setGeolocationEnabled(true);
        webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
        webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
        webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);

super.onReceivedTitle(view, title);

Activity调用PrimWeb Fragment调用PrimWeb 识别电话短信邮箱
activity.gif fragment.gif sms.gif

android系统的WebView相比较坑,须要一丝丝记录和积攒.

}

JS通信 文件上传 自定义错误页面
js.gif input.gif error.gif
WebView允许 js 弹出提示框

暗许WebView是不帮忙js 弹框的,要求重写setWebChromeClient里面包车型客车主意
onJsAlert()
onJsConfirm()
onJsPrompt()

WebSettings settings = webView.getSettings();  
    settings.setJavaScriptEnabled(true);//启用支持js  
    //设置响应js 的Alert()函数  
    webView.setWebChromeClient(new WebChromeClient() {  
       @Override  
        public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {  
            AlertDialog.Builder b = new AlertDialog.Builder(TestAlertActivity.this);  
            b.setTitle("Alert");  
            b.setMessage(message);  
            b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {  
        @Override  
         public void onClick(DialogInterface dialog, int which) {  
             result.confirm();  
         }  });  
             b.setCancelable(false);  
             b.create().show();  
             return true;  
         }  
         //设置响应js 的Confirm()函数  
         @Override  
         public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {  
             AlertDialog.Builder b = new AlertDialog.Builder(TestAlertActivity.this);  
             b.setTitle("Confirm");  
             b.setMessage(message);  
             b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {  
         @Override  
         public void onClick(DialogInterface dialog, int which) {  
             result.confirm();  
         } });  
             b.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {  
         @Override  
         public void onClick(DialogInterface dialog, int which) {  
              result.cancel();  
           } });  
              b.create().show();  
              return true;  
         }  
         //设置响应js 的Prompt()函数  
        @Override  
        public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) {  

             ......
             return true;  
        }  
   });  
        webView.loadUrl("file:///android_asset/index3.html");  

皇家赌场游戏 2logo.png

WebView防止内部存款和储蓄器走漏

1.尽量施用 WebView webView = new WebView(卡塔尔(قطر‎;然后动态增多进布局,不要在XML布局文件之中申请使用
2.在不利用的时候要自由 WebView

if (mWebView != null) {
        mWebView.setVisibility(View.GONE);
        mWebView.clearHistory();
        mWebView.stopLoading();
        ((ViewGroup) mWebView.getParent()).removeView(mWebView);
        mWebView.removeAllViews();
        mWebView.clearView();
        mWebView.destroy();
        mWebView = null;
}

3.为加载WebView的分界面开启新进程(权且没试过卡塔尔国,在该页面退出之后关闭那一个历程,假如供给通讯,将在涉及到跨进程通讯的难题.

现阶段用了叁个不常的法子解决:

PrimWeb 是叁个代理的WebView基于的 Android WebView 和 Tencent x5 WebView,轻便、灵活利用以致功能特别强盛的库,提供了 WebView 一多元的标题一举成功方案 ,并且轻量和灵活,更有利 webview 的切换.

WebView加载本地的html

webview去加载html,就是出殡和安葬乞请去加载页面

1.把财富放到android项目目录里面

皇家赌场游戏 3

2.点名地点路线,

final String url = "file:///android_asset/admin.html
mWebView.loadUrl(url);

设若html须求参数,也能够在末端增加参数,肖似get需要

final String url = "file:///android_asset/admin.html?url=xxxxx
mWebView.loadUrl(url);

@Override

  • v1.0.0

     完善功能
    
  • v1.0.1

     1. 回退和返回键的简化处理 2. 添加返回拦截,处理特殊情况 3. 添加进度条指示器可自定义 4. 添加错误页面可自定义 5. 优化文件上传
    

1.TencentX5WebView: 由TencentQQ浏览器团队产物
合丹麦语档

webView.destroy();

  1. 扶植动态增添WebView
  2. 支持X5WebView 和 原生的WebView切换
  3. 简化Js通信
  4. 灵活的安装WebSetting
  5. 代理WebViewClient 兼容 X5 WebView和android WebView
  6. 代理WebChormeClient 兼容 android webview 和 x5 webview
  7. 援救推断js方法是不是留存
  8. 支撑input标签文件上传
  9. 支撑Js通讯文件上传
  10. 简化回降及再次来到键的管理
  11. 简化url加载
  12. webview 安全漏洞的难题修复,尤其安全
  13. 帮忙权限管理,常用的固化、相册的权位
  14. 支撑电话、短信、邮件的跳转
  15. 支撑自定义进程条提醒器
  16. 支撑自定义错误页面
  17. 支撑跳转到其余使用页面
webview加载退步,404 501 等等难题管理

WebChromeClient的片段艺术以至作用

mWebView.setWebChromeClient(new WebChromeClient() {
  @Override
   public void onReceivedTitle(WebView webView, String title) {
          //这里能获取到webView加载页面的标题,然后判断title是否包含指定的信息
          if(title.contains("404") || title.contains("501") || title.contains("error")){
               //做对应的处理
          }
    }
}

returntrue;

纵然项目要求大量的用WebView来拍卖职业,用的可比深刻,能够应用第三方优化过的WebView :

@SuppressLint("NewApi")

10-1015:01:26.818: E/webview(7502):    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3619)

""> ";

mWebView.getSettings().setDisplayZoomControls(false);

/**

@Override

}

10-1015:01:26.818: E/webview(7502):    at dalvik.system.NativeStart.main(Native Method)

if(DeviceUtils.hasHoneycomb())

10-1015:01:26.818: E/webview(7502):    at android.os.Looper.loop(Looper.java:137)

Android WebView是阻止不到页面内的fragment跳转的。不过url跳转的话,又会唤起页面刷新,H5页面包车型地铁体会又下落了。只好给WebView注入JS方法了。

*/

getContentHeight 重回的是一体html 的冲天,但并不平等当前全方位页面包车型大巴万丈,因为WebView 有缩放成效, 所以当前全体页面包车型地铁高度其实应该是原始html 的莫斯中国科学技术大学学再乘上缩放比例. 因而,改革后的结果,准确的论断方法应该是:

CookieManager.getInstance().removeSessionCookie();

[java]view plaincopy

因为健康顺序加载的事态onReceiveTitle是迟早会接触的,所以就须要和煦来保安webview  loading的一个url栈及url与title的照耀关系

// 非超链接(如Ajax卡塔尔央浼无法直接增添央浼头,现拼接到url末尾,这里拼接三个imei作为示范

webParentView.addView(mErrorView,0, lp);

13.WebView因addJavaScriptInterface(State of Qatar引起的六安瓜片难点.

publicbooleanonLongClick(View v) {

.http://blog.csdn.net/leehong2005/article/details/11808557

protectedvoidinitErrorPage() {

如上所示,webview调用destory时,webview仍绑定在Activity上.这是由于自定义webview塑造时传出了该Activity的context对象,因而需求先从父容器中移除webview,然后再销毁webview:

@Override

皇家赌场游戏 4

mWebView.setOnLongClickListener(newOnLongClickListener() {

Android WebView数不胜数难点建设方案汇总:

10-1015:01:26.818: E/webview(7502):    at java.lang.reflect.Method.invoke(Method.java:525)

[java]view plaincopy

webView.destroy();

四月份更新:

偶尔供给丰盛诉求头,不过非超链接的呼吁,未有章程再shouldOverrinding中梗阻并用webView.loadUrl(String url,HashMap headersState of Qatar方法增添央求头

}

rootLayout.removeView(webView);

if(url.contains("req=ajax")) {

};

LinearLayout webParentView = (LinearLayout)mWebView.getParent();

@Override

webView.clearCache(true);

(2State of Qatar 安卓层拍卖:

if(WebView.getContentHeight*WebView.getScale(卡塔尔(قطر‎ == (webview.getHeight(卡塔尔(قطر‎ WebView.getScrollY(卡塔尔卡塔尔(قطر‎卡塔尔{//已经处在底端 }

10-1015:01:11.402: E/ViewRootImpl(7502): sendUserActionEvent() mView ==null

https://github.com/btate/BTAndroidWebViewSelection

                  

10-1015:01:26.818: E/webview(7502): java.lang.Throwable: Error: WebView.destroy() calledwhilestill attached!

处理android.selection.longTouch

String encoding ="utf-8";

""> 

@Override

至于详细的景观可以仿照效法下边那篇随笔:

只是一向调用也许会挑起如下错误:

唯独发未来HUAWEI3的手提式有线电话机上,当通过webview.goBack(卡塔尔(قطر‎回降的时候,并从未触发onReceiveTitle(卡塔尔,那样会招致标题仍为事前子页面包车型地铁标题,未有切换回来.

mWebView.getSettings().setBuiltInZoomControls(true);

8.屏蔽掉长按事件 因为webview长定时将会调用系统的复制控件:

瞩目:setDisplayZoomControls是在Android 3.0中新添的API.

4.判定WebView是还是不是已经滚动到页面底端:

publicvoidonReceivedTitle(WebView view, String title) {

本文由68399皇家赌场发布于集成介绍,转载请注明出处:【皇家赌场游戏】强大灵活的WebView代理库,Web

关键词: webview... Web 灵活 强大 PrimWeb

上一篇:RxCache使用详解,学习资源汇总

下一篇:没有了

最火资讯