{"id":2531,"date":"2018-02-27T10:45:16","date_gmt":"2018-02-27T02:45:16","guid":{"rendered":"http:\/\/www.xttblog.com\/?p=2531"},"modified":"2018-02-27T10:45:16","modified_gmt":"2018-02-27T02:45:16","slug":"agentweb-%e6%95%99%e7%a8%8b","status":"publish","type":"post","link":"https:\/\/www.xttblog.com\/?p=2531","title":{"rendered":"AgentWeb \u6559\u7a0b"},"content":{"rendered":"<p>\n\t<a href=\"https:\/\/github.com\/Justson\/AgentWeb\" name=\"AgentWeb\" target=\"_blank\" title=\"AgentWeb\">AgentWeb<\/a> \u662f\u4e00\u4e2a\u57fa\u4e8e Android \u7684 WebView \u529f\u80fd\u5f3a\u5927\u7684\u7ec4\u4ef6\u5e93\u3002\u5728&nbsp;WebView \u6027\u80fd\u548c\u7528\u6237\u4f53\u9a8c\u505a\u4e86\u5f88\u591a\u7684\u4f18\u5316\uff0c\u76ee\u524d\u6709\u7f51\u53cb\u5f00\u6e90\u5728\u4e86 github \u4e0a\u3002\u672c\u6587\u4e3b\u8981\u8d1f\u8d23\u8bb2\u89e3\u5b83\u7684\u4e00\u4e9b\u7b80\u5355\u7684\u7528\u6cd5\u3002\n<\/p>\n<h2>\n\tAgentWeb \u4ecb\u7ecd<br \/>\n<\/h2>\n<p>\n\t<a href=\"https:\/\/github.com\/Justson\/AgentWeb\" name=\"AgentWeb\" target=\"_blank\" title=\"AgentWeb\">AgentWeb<\/a> \u662f\u4e00\u4e2a\u57fa\u4e8e\u7684 Android WebView \uff0c\u6781\u5ea6\u5bb9\u6613\u4f7f\u7528\u4ee5\u53ca\u529f\u80fd\u5f3a\u5927\u7684\u5e93 \u3002\n<\/p>\n<p>\n\t<img decoding=\"async\" alt=\"AgentWeb\" src=\"https:\/\/github.com\/Justson\/AgentWeb\/raw\/master\/img\/logo.png\" style=\"width: 685px;height: 256px\" \/>\n<\/p>\n<h2>\n\tAgentWeb \u529f\u80fd<br \/>\n<\/h2>\n<ul>\n<li>\n\t\t\u652f\u6301\u8fdb\u5ea6\u6761\u4ee5\u53ca\u81ea\u5b9a\u4e49\u8fdb\u5ea6\u6761\n\t<\/li>\n<li>\n\t\t\u652f\u6301\u6587\u4ef6\u4e0b\u8f7d\n\t<\/li>\n<li>\n\t\t\u652f\u6301\u6587\u4ef6\u4e0b\u8f7d\u65ad\u70b9\u7eed\u4f20\n\t<\/li>\n<li>\n\t\t\u652f\u6301\u4e0b\u8f7d\u901a\u77e5\u5f62\u5f0f\u63d0\u793a\u8fdb\u5ea6\n\t<\/li>\n<li>\n\t\t\u7b80\u5316 Javascript \u901a\u4fe1\n\t<\/li>\n<li>\n\t\t\u652f\u6301 Android 4.4 Kitkat \u4ee5\u53ca\u5176\u4ed6\u7248\u672c\u6587\u4ef6\u4e0a\u4f20\n\t<\/li>\n<li>\n\t\t\u652f\u6301\u6ce8\u5165 Cookies\n\t<\/li>\n<li>\n\t\t\u52a0\u5f3a Web \u5b89\u5168\n\t<\/li>\n<li>\n\t\t\u517c\u5bb9\u4f4e\u7248\u672c\u5b89\u5168 Js \u901a\u4fe1\n\t<\/li>\n<\/ul>\n<h2>\n\tAgentWeb \u7684\u4f18\u70b9<br \/>\n<\/h2>\n<table>\n<thead>\n<tr>\n<th align=\"center\">\n\t\t\t\tWeb\n\t\t\t<\/th>\n<th align=\"center\">\n\t\t\t\t\u6587\u4ef6\u4e0b\u8f7d\n\t\t\t<\/th>\n<th align=\"left\">\n\t\t\t\t\u6587\u4ef6\u4e0a\u4f20\n\t\t\t<\/th>\n<th align=\"left\">\n\t\t\t\tJs \u901a\u4fe1\n\t\t\t<\/th>\n<th align=\"left\">\n\t\t\t\t\u65ad\u70b9\u7eed\u4f20\n\t\t\t<\/th>\n<th align=\"left\">\n\t\t\t\t\u4f7f\u7528\u7b80\u6613\u5ea6\n\t\t\t<\/th>\n<th align=\"left\">\n\t\t\t\t\u8fdb\u5ea6\u6761\n\t\t\t<\/th>\n<th align=\"left\">\n\t\t\t\t\u7ebf\u7a0b\u5b89\u5168\n\t\t\t<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"center\">\n\t\t\t\tWebView\n\t\t\t<\/td>\n<td align=\"center\">\n\t\t\t\t\u4e0d\u652f\u6301\n\t\t\t<\/td>\n<td align=\"left\">\n\t\t\t\t\u4e0d\u652f\u6301\n\t\t\t<\/td>\n<td align=\"left\">\n\t\t\t\t\u652f\u6301\n\t\t\t<\/td>\n<td align=\"left\">\n\t\t\t\t\u4e0d\u652f\u6301\n\t\t\t<\/td>\n<td align=\"left\">\n\t\t\t\t\u9ebb\u70e6\n\t\t\t<\/td>\n<td align=\"left\">\n\t\t\t\t\u6ca1\u6709\n\t\t\t<\/td>\n<td align=\"left\">\n\t\t\t\t\u4e0d\u5b89\u5168\n\t\t\t<\/td>\n<\/tr>\n<tr>\n<td align=\"center\">\n\t\t\t\tAgentWeb\n\t\t\t<\/td>\n<td align=\"center\">\n\t\t\t\t\u652f\u6301\n\t\t\t<\/td>\n<td align=\"left\">\n\t\t\t\t\u652f\u6301\n\t\t\t<\/td>\n<td align=\"left\">\n\t\t\t\t\u66f4\u7b80\u6d01\n\t\t\t<\/td>\n<td align=\"left\">\n\t\t\t\t\u652f\u6301\n\t\t\t<\/td>\n<td align=\"left\">\n\t\t\t\t\u7b80\u6d01\n\t\t\t<\/td>\n<td align=\"left\">\n\t\t\t\t\u6709\n\t\t\t<\/td>\n<td align=\"left\">\n\t\t\t\t\u5b89\u5168\n\t\t\t<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\n\t\u57fa\u672c\u7528\u6cd5\n<\/p>\n<p>\n\t\u5728\u4f7f\u7528 \u4e4b\u524d\uff0c\u6211\u4eec\u5148\u5f15\u5165\u5b83\u3002\n<\/p>\n<ul>\n<li>\n<p>\n\t\t\tGradle\n\t\t<\/p>\n<pre class=\"brush:plain;\">\r\n compile &#039;com.just.agentweb:agentweb:4.0.0&#039; \/\/ (\u5fc5\u9009)\r\n compile &#039;com.just.agentweb:download:4.0.0&#039; \/\/ (\u53ef\u9009)\r\n compile &#039;com.just.agentweb:filechooser:4.0.0&#039;\/\/ (\u53ef\u9009) \r\n<\/pre>\n<\/li>\n<li>\n<p>\n\t\t\tMaven\n\t\t<\/p>\n<pre class=\"brush:plain;\">\r\n&lt;dependency&gt;\r\n   &lt;groupId&gt;com.just.agentweb&lt;\/groupId&gt;\r\n   &lt;artifactId&gt;agentweb&lt;\/artifactId&gt;\r\n   &lt;version&gt;4.0.0&lt;\/version&gt;\r\n   &lt;type&gt;pom&lt;\/type&gt;\r\n &lt;\/dependency&gt;<\/pre>\n<\/li>\n<\/ul>\n<p>\n\t\u770b\u4e0b\u9762\u7684\u4f8b\u5b50\uff1a\n<\/p>\n<pre class=\"brush:java;\">\r\nmAgentWeb = AgentWeb.with(this)\r\n                .setAgentWebParent((LinearLayout) view, new LinearLayout.LayoutParams(-1, -1))                \r\n                .useDefaultIndicator()\r\n                .createAgentWeb()\r\n                .ready()\r\n                .go(&quot;http:\/\/www.xttblog.com&quot;);<\/pre>\n<p>\n\t\u8fd0\u884c\u6548\u679c\u5982\u4e0b\u6240\u793a\uff1a\n<\/p>\n<p>\n\t<img decoding=\"async\" alt=\"AgentWeb\" src=\"https:\/\/github.com\/Justson\/AgentWeb\/raw\/master\/img\/img-sonic.png\" style=\"width: 720px;height: 1280px\" \/>\n<\/p>\n<h2>\n\t\u8c03\u7528 Javascript \u65b9\u6cd5<br \/>\n<\/h2>\n<pre class=\"brush:jscript;\">\r\nfunction callByAndroid(){\r\n      console.log(&quot;callByAndroid&quot;)\r\n  }\r\nmAgentWeb.getJsEntraceAccess().quickCallJs(&quot;callByAndroid&quot;);<\/pre>\n<h2>\n\tJavascript \u8c03 Java<br \/>\n<\/h2>\n<pre class=\"brush:java;\">\r\nmAgentWeb.getJsInterfaceHolder().addJavaObject(&quot;android&quot;,new AndroidInterface(mAgentWeb,this));\r\nwindow.android.callAndroid();<\/pre>\n<p>\n\t\u4e8b\u4ef6\u5904\u7406\n<\/p>\n<pre class=\"brush:java;\">\r\n@Override\r\npublic boolean onKeyDown(int keyCode, KeyEvent event) {\r\n\/\/ \u4e1a\u4f59\u8349\uff1awww.xttblog.com\r\n\tif (mAgentWeb.handleKeyEvent(keyCode, event)) {\r\n\t\treturn true;\r\n\t}\r\n\treturn super.onKeyDown(keyCode, event);\r\n}<\/pre>\n<p>\n\t\u8ddf\u968f Activity Or Fragment \u751f\u547d\u5468\u671f \uff0c \u91ca\u653e CPU \u66f4\u7701\u7535 \u3002\n<\/p>\n<pre class=\"brush:java;\">\r\n@Override\r\nprotected void onPause() {\r\n\tmAgentWeb.getWebLifeCycle().onPause(); \r\n\tsuper.onPause();\r\n}\r\n@Override\r\nprotected void onResume() {\r\n\tmAgentWeb.getWebLifeCycle().onResume();\r\n\tsuper.onResume();\r\n}\r\n@Override\r\npublic void onDestroyView() {\r\n\tmAgentWeb.getWebLifeCycle().onDestroy();\r\n\tsuper.onDestroyView();\r\n}   <\/pre>\n<p>\n\t\u5168\u5c4f\u89c6\u9891\u64ad\u653e\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;!--\u5982\u679c\u4f60\u7684\u5e94\u7528\u9700\u8981\u7528\u5230\u89c6\u9891 \uff0c \u90a3\u4e48\u8bf7\u4f60\u5728\u4f7f\u7528 AgentWeb \u7684 Activity \u5bf9\u5e94\u7684\u6e05\u5355\u6587\u4ef6\u91cc\u52a0\u5165\u5982\u4e0b\u914d\u7f6e--&gt;\r\nandroid:hardwareAccelerated=&quot;true&quot;\r\nandroid:configChanges=&quot;orientation|screenSize&quot;<\/pre>\n<p>\n\t\u5b9a\u4f4d\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;!--AgentWeb \u662f\u9ed8\u8ba4\u5141\u8bb8\u5b9a\u4f4d\u7684 \uff0c\u5982\u679c\u4f60\u9700\u8981\u8be5\u529f\u80fd \uff0c \u8bf7\u5728\u4f60\u7684 AndroidManifest \u6587\u4ef6\u91cc\u9762\u52a0\u5165\u5982\u4e0b\u6743\u9650 \u3002--&gt;\r\n&lt;uses-permission android:name=&quot;android.permission.ACCESS_FINE_LOCATION&quot; \/&gt;\r\n&lt;uses-permission android:name=&quot;android.permission.ACCESS_COARSE_LOCATION&quot; \/&gt;<\/pre>\n<p>\n\tWebChromeClient Or WebViewClient \u5904\u7406\u4e1a\u52a1\u903b\u8f91\n<\/p>\n<pre class=\"brush:java;\">\r\nAgentWeb.with(this)\/\/\r\n\t.setAgentWebParent(mLinearLayout,new LinearLayout.LayoutParams(-1,-1) )\/\/\r\n\t.useDefaultIndicator()\/\/\r\n\t.setReceivedTitleCallback(mCallback)\r\n\t.setWebChromeClient(mWebChromeClient)\r\n\t.setWebViewClient(mWebViewClient)\r\n\t.setSecutityType(AgentWeb.SecurityType.strict)\r\n\t.createAgentWeb()\/\/\r\n\t.ready()\r\n\t.go(getUrl());\r\nprivate WebViewClient mWebViewClient=new WebViewClient(){\r\n\t@Override\r\n\tpublic void onPageStarted(WebView view, String url, Bitmap favicon) {\r\n\t   \/\/do you  work\r\n\t}\r\n};\r\nprivate WebChromeClient mWebChromeClient=new WebChromeClient(){\r\n\t@Override\r\n\tpublic void onProgressChanged(WebView view, int newProgress) {\r\n\t\t\/\/do you work\r\n\t}\r\n};<\/pre>\n<p>\n\t\u8fd4\u56de\u4e0a\u4e00\u9875\n<\/p>\n<pre class=\"brush:java;\">\r\nif (!mAgentWeb.back()){\r\n   AgentWebFragment.this.getActivity().finish();\r\n}<\/pre>\n<p>\n\t\u83b7\u53d6 WebView\n<\/p>\n<pre class=\"brush:java;\">\r\nmAgentWeb.getWebCreator().getWebView();<\/pre>\n<p>\n\t\u6587\u4ef6\u4e0b\u8f7d\u76d1\u542c\n<\/p>\n<pre class=\"brush:java;\">\r\nprotected DownloadListenerAdapter mDownloadListenerAdapter = new DownloadListenerAdapter() {\r\n\t@Override\r\n\tpublic boolean onStart(String url, String userAgent, String contentDisposition, String mimetype, \r\n\tlong contentLength, AgentWebDownloader.Extra extra) {\r\n\t\textra.setOpenBreakPointDownload(true)\r\n\t\t\t\t.setIcon(R.drawable.ic_file_download_black_24dp)\r\n\t\t\t\t.setConnectTimeOut(6000)\r\n\t\t\t\t.setBlockMaxTime(2000)\r\n\t\t\t\t.setDownloadTimeOut(60L * 5L * 1000L)\r\n\t\t\t\t.setAutoOpen(true)\r\n\t\t\t\t.setForceDownload(false);\r\n\t\treturn false;\r\n\t}\r\n\t@Override\r\n\tpublic void onBindService(String url, DownloadingService downloadingService) {\r\n\t\tsuper.onBindService(url, downloadingService);\r\n\t\tmDownloadingService = downloadingService;\r\n\t\tLogUtils.i(TAG, &quot;onBindService:&quot; + url + &quot;  DownloadingService:&quot; + downloadingService);\r\n\t}\r\n\t@Override\r\n\tpublic void onUnbindService(String url, DownloadingService downloadingService) {\r\n\t\tsuper.onUnbindService(url, downloadingService);\r\n\t\tmDownloadingService = null;\r\n\t\tLogUtils.i(TAG, &quot;onUnbindService:&quot; + url);\r\n\t}\r\n\t@Override\r\n\tpublic void onProgress(String url, long loaded, long length, long usedTime) {\r\n\t\tint mProgress = (int) ((loaded) \/ Float.valueOf(length) * 100);\r\n\t\tLogUtils.i(TAG, &quot;onProgress:&quot; + mProgress);\r\n\t\tsuper.onProgress(url, loaded, length, usedTime);\r\n\t}\r\n\t@Override\r\n\tpublic boolean onResult(String path, String url, Throwable throwable) {\r\n\t\tif (null == throwable) { \r\n\t\t\t\/\/do you work\r\n\t\t} else {\r\n\r\n\t\t}\r\n\t\treturn false; \r\n\t}\r\n};<\/pre>\n<p>\n\t<a href=\"https:\/\/github.com\/Justson\/AgentWeb\" name=\"AgentWeb\" target=\"_blank\" title=\"AgentWeb\">AgentWeb<\/a> \u7684\u529f\u80fd\u5f88\u5f3a\u5927\uff0c\u8fd8\u6709\u5f88\u591a\u5b9e\u7528\u7684\u529f\u80fd\uff0c\u8bf7\u53c2\u8003\u5b98\u7f51 api \u548c\u76f8\u5173 demo\u3002\n<\/p>\n<h2>\n\tAgentWeb \u5185\u90e8\u7ed3\u6784<br \/>\n<\/h2>\n<p>\n\t<img decoding=\"async\" alt=\"AgentWeb\" src=\"https:\/\/github.com\/Justson\/AgentWeb\/raw\/master\/img\/agentweb%E7%BB%93%E6%9E%84.png\" \/>\n<\/p>\n<ul>\n<li>\n\t\tIndicatorController \u8fdb\u5ea6\u6761\u63a7\u5236\u5668\n\t<\/li>\n<li>\n\t\tWebCreator \u521b\u5efa WebView \u3002\n\t<\/li>\n<li>\n\t\tWebSettings \u7edf\u4e00\u8bbe\u7f6e WebView \u7684 settings\n\t<\/li>\n<li>\n\t\tWebSecurityController \u5b89\u5168\u63a7\u5236\u5668\n\t<\/li>\n<li>\n\t\tJsEntraceAccess Js \u65b9\u6cd5\u5165\u53e3\n\t<\/li>\n<\/ul>\n<!-- <audio autoplay=\"autoplay\" height=\"100\" width=\"100\" hidden=\"true\"><source src=\"https:\/\/c.coka.la\/orAvPR.mp3\" type=\"audio\/mp3\"\/><\/audio><img decoding=\"async\" src=\"https:\/\/images.weserv.nl\/?url=https:\/\/ws3.sinaimg.cn\/large\/8fa5dcfcgy1g4em3rzar5j20ib089ae0.jpg\" alt=\"\u4e1a\u4f59\u8349\u516c\u4f17\u53f7\"\/> --><p><!-- <img decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/xmt1139057136\/xttblog\/master\/8fa5dcfcgy1g4em3rzar5j20ib089ae0.jpg\" alt=\"\u4e1a\u4f59\u8349\u516c\u4f17\u53f7\"\/>--><img decoding=\"async\" src=\"https:\/\/saas.51autoparts.cn\/api\/admin\/sys-file\/oss\/file?fileName=84db51f8561e448f9a4fda2eff0811f9.jpg\" alt=\"\u4e1a\u4f59\u8349\u516c\u4f17\u53f7\"\/><\/p><p>\u6700\u540e\uff0c\u6b22\u8fce\u5173\u6ce8\u6211\u7684\u4e2a\u4eba\u5fae\u4fe1\u516c\u4f17\u53f7\uff1a\u4e1a\u4f59\u8349\uff08yyucao\uff09\uff01<b>\u53ef\u52a0\u4f5c\u8005\u5fae\u4fe1\u53f7\uff1a<font color=\"red\">xttblog2<\/font>\u3002\u5907\u6ce8\uff1a\u201c1\u201d\uff0c\u6dfb\u52a0\u535a\u4e3b\u5fae\u4fe1\u62c9\u4f60\u8fdb\u5fae\u4fe1\u7fa4\u3002\u5907\u6ce8\u9519\u8bef\u4e0d\u4f1a\u540c\u610f\u597d\u53cb\u7533\u8bf7\u3002<\/b>\u518d\u6b21\u611f\u8c22\u60a8\u7684\u5173\u6ce8\uff01\u540e\u7eed\u6709\u7cbe\u5f69\u5185\u5bb9\u4f1a\u7b2c\u4e00\u65f6\u95f4\u53d1\u7ed9\u60a8\uff01\u539f\u521b\u6587\u7ae0\u6295\u7a3f\u8bf7\u53d1\u9001\u81f3532009913@qq.com\u90ae\u7bb1\u3002\u5546\u52a1\u5408\u4f5c\u4e5f\u53ef\u6dfb\u52a0\u4f5c\u8005\u5fae\u4fe1\u8fdb\u884c\u8054\u7cfb\uff01<\/p><p>\u672c\u6587\u539f\u6587\u51fa\u5904\uff1a<a href=\"https:\/\/www.xttblog.com\">\u4e1a\u4f59\u8349<\/a>\uff1a &raquo; <a href=\"https:\/\/www.xttblog.com\/?p=2531\">AgentWeb \u6559\u7a0b<\/a><\/p><!-- <div class=\"bd-reward-stl\"><button id=\"bdRewardBtn\"><span><\/span><\/button><\/div> -->","protected":false},"excerpt":{"rendered":"<p>AgentWeb \u662f\u4e00\u4e2a\u57fa\u4e8e Android \u7684 WebView \u529f\u80fd\u5f3a\u5927\u7684\u7ec4\u4ef6\u5e93\u3002\u5728&nbsp;WebVie [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[891,697,699,69,1606],"class_list":["post-2531","post","type-post","status-publish","format-standard","hentry","category-java","tag-android","tag-android-studio","tag-androiddevtools","tag-java","tag-webview"],"_links":{"self":[{"href":"https:\/\/www.xttblog.com\/index.php?rest_route=\/wp\/v2\/posts\/2531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xttblog.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xttblog.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xttblog.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xttblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2531"}],"version-history":[{"count":1,"href":"https:\/\/www.xttblog.com\/index.php?rest_route=\/wp\/v2\/posts\/2531\/revisions"}],"predecessor-version":[{"id":2532,"href":"https:\/\/www.xttblog.com\/index.php?rest_route=\/wp\/v2\/posts\/2531\/revisions\/2532"}],"wp:attachment":[{"href":"https:\/\/www.xttblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xttblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2531"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xttblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}