Articles of webviewclient

Android:在设置WebViewCore之前不支持EventHub.removeMessages(int what = 107)

我在Dialog Activity中实现了WebView,我正在将简单的url加载到webview中。 我的Webview设置如下 wbView = (WebView) findViewById(R.id.wbView); wbView.setKeepScreenOn(true); wbView.getSettings().setJavaScriptEnabled(true); wbView.getSettings().setDomStorageEnabled(true); wbView.getSettings().setBuiltInZoomControls(true); wbView.setInitialScale(100); // wbView.getSettings().setUseWideViewPort(true); wbView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); wbView.setWebViewClient(new MyWebViewClient()); 和MyWebViewClient()包含 private class MyWebViewClient extends WebViewClient { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); prgBar.setVisibility(View.GONE); } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { Log.e(“Error VAGARO”, error.toString()); prgBar.setVisibility(View.GONE); handler.proceed(); } @Override public boolean […]

在Android WebViewClient中考虑onPageFinished的是什么?

我正在尝试在我的网页完成加载后在Android WebView上执行操作。 我设置我的WebView以使用WebViewClient来使用onPageFinished事件回调。 但是,经过一些测试后,似乎还没等到页面上的所有JS都在我的onPageFinished代码触发之前完成加载。 Google文档说明了这一点: public void onPageFinished (WebView view, String url) 在API级别1中添加通知主机应用程序页面已完成加载。 仅为主框架调用此方法。 调用onPageFinished()时,渲染图片可能尚未更新。 要获取新图片的通知,请使用onNewPicture(WebView,Picture)。 参数 view正在启动回调的WebView。 url页面的url。 1)onPageFinished只等待DOM加载吗? 2)有没有办法检测页面上的任何JS何时完成? 如果是这样,我应该使用什么? 我没有在WebViewClient中看到任何可能用于此目的的内容。 我不想添加延迟,因为我的用户可以在EDGE或LTE上。

在WebViewClient中覆盖shouldInterceptRequest时系统崩溃

目标: 覆盖WebView发出的所有请求并自行发出请求(最终设置代理)。 码: @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { if (url == null || url.trim().equals(“”)) return null; final DefaultHttpClient httpClient = new DefaultHttpClient(); httpClient.getConnectionManager().closeExpiredConnections(); final HttpUriRequest httpRequest = new HttpGet(url); try { final HttpResponse response = httpClient.execute(httpRequest); final Header[] headers = response.getHeaders(CONTENT_TYPE); String mimeType = “”; String encoding = “”; if (headers != […]

Android – 使用外部浏览器在WebView中打开目标_blank链接

我构建了一个显示网站的WebView 。 该网站包含没有target=”_blank”属性的链接和一些带有它的链接。 我需要打开外部标准设备浏览器中定义的target链接和WebView中没有它的链接。 我正在使用WebViewClient ,我尝试使用此function但仍然在WebView中打开所有链接: 备选方案1: @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return super.shouldOverrideUrlLoading(view, url); } 备选方案2: @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } 有人知道如何在外部打开空白链接吗? 谢谢! PS:为了避免误解:我不能使用这种方法,因为我知道链接应该外部打开的唯一方法是target属性。

java.io.IOException的WebView崩溃:关闭失败:EIO(I / O错误)libcore.io.IoUtils.close(IoUtils.java:41)

我在Android 4.0 / 4.1上有用户上传崩溃日志,但我无法重现它。日志是这样的: java.io.IOException: close failed: EIO (I/O error) libcore.io.IoUtils.close(IoUtils.java:41) java.io.FileInputStream.close(FileInputStream.java:121) android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method) android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:113) android.os.Handler.dispatchMessage(Handler.java:99) android.os.Looper.loop(Looper.java:137) android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:949) java.lang.Thread.run(Thread.java:856) cause by: libcore.io.ErrnoException: close failed: EIO (I/O error) libcore.io.Posix.close(Native Method) libcore.io.BlockGuardOs.close(BlockGuardOs.java:75) libcore.io.IoUtils.close(IoUtils.java:38) java.io.FileInputStream.close(FileInputStream.java:121) android.webkit.JWebCoreJavaBridge.nativeServiceFuncPtrQueue(Native Method) android.webkit.JWebCoreJavaBridge.handleMessage(JWebCoreJavaBridge.java:113) android.os.Handler.dispatchMessage(Handler.java:99) android.os.Looper.loop(Looper.java:137) android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:949) java.lang.Thread.run(Thread.java:856) 有谁知道它是如何发生的?或者如何解决它?

适用于Facebook的Android WebView按钮

我正在尝试在Android WebView中使用类似Facebook的function(项目规范不允许浏览器打开,或任何不在应用程序活动中)。 因此,限制是它必须在WebView中完成。 我已经设法使它成为一个对话框,并且用户点击按钮,它(WebView)成功(在同一视图中)重定向到facebooks登录页面。 身份validation成功后, WebView (在对话框中)将重定向到带有标题的空白页面 。 有趣的是,当用户离开空白对话框并再次单击类似按钮时,它的工作方式非常完美(喜欢和不同) – 它以某种方式保持身份validation活动。 要解决空白页面,我尝试过/使用过以下内容: 使用WebViewClient和shouldOverloadUrlForwarding将整个进程保持在同一个WebView对话框中。 使用WebChromeClient正确执行JavaScript – 在登录后没有它可能不喜欢/不同。 尝试使用setUserAgentString()来模拟Chrome或Firefox等其他浏览器 尝试了SSL错误证书处理(API级别8)(在WebViewClient ) @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } 使用(以及所有可能的组合) webView.getSettings().setAppCacheEnabled(true); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 尝试使用CookieSyncManager , CookieManager持久存储cookie并手动处理。 所有这一切都没有结果。 我非常感谢任何帮助!

forOverrideUrlLoading在WebView for Android中未运行

-Edit:find解决方案 – 在经过一番繁重的搜索后想出来 – 一个人(我的意思是一个人)说他们改为使用onPageLoad(); 这完全符合我的目的。 区别在于onPageLoad()的运行时间晚于shouldOverrideUrlLoading,但它对我的代码没有影响。 我正在尝试使用OAuth为Android应用程序设置Twitter授权,到目前为止我可以成功将用户发送到授权URL,但是,我现在要做的是拦截重定向到回调(这只是导致404错误,我们的回调URL不会在我们的服务器上有关联的页面)。 我试图做的是检查URL是否是我们的回调,然后从URL中提取OAuth Verifier。 我使用以下代码设置我的WebView: view = (WebView)findViewById(R.id.twitterWbVw); view.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView wView, String url) { String urlHolder; String[] verifExtrctr; urlHolder = url.substring(0, url.indexOf(‘?’)); System.out.println(“url”); if(urlHolder.equalsIgnoreCase(CALLBACK_URL)) { verifExtrctr = urlHolder.split(“?”); verifExtrctr = verifExtrctr[2].split(“=”); if(verifExtrctr[0].equalsIgnoreCase(“oauth_verifier”)) { params[5] = verifExtrctr[1]; return true; } else { System.out.println(“Inocorrect callback URL format.”); […]

WebView loadUrl只能工作一次

编辑:我在几年前就参与了这个项目,不幸的是我无法validation在给定的场景中是否有任何答案。 我很难用一个WebView来显示我们的博客。 当它被启动时,它可以正常工作。 用户可以导航到WebView中的不同链接。 要返回博客,WebView外部有一个按钮,可以再次加载主博客站点。 问题是,第二次调用loadUrl后没有加载任何内容。 这是我的代码: private WebView wv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.blog); wv = (WebView) findViewById(R.id.blog_webview); wv.getSettings().setJavaScriptEnabled(true); wv.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon { MyLog.logDump(“onPageStarted: ” + url); } @Override public void onPageFinished(WebView view, String url) { MyLog.logDump(“onPageFinished: ” + url); } }); […]

使用Android WebViewClient启用特定的SSL协议

我的应用程序使用WebViewClient与服务器建立SSL连接。 服务器配置为仅接受TLSv1.1及以上协议。 1)如何检查哪些SSL协议是a)支持和b)在设备上使用Android WebViewClient时默认启用。 2)如何为我的应用程序中使用的Android WebViewClient实例启用特定的SSL协议。 在其中一个运行Android 4.3的测试设备上,WebViewClient抛出onReceivedError回调,其描述为“无法执行SSL握手” Chrome日志如下: 01-29 15:58:00.073 5486 5525 W chromium_net:external / chromium / net / http / http_stream_factory_impl_job.cc:865:[0129/155800:警告:http_stream_factory_impl_job.cc(865)]回到SSLv3,因为主机是TLS不容忍的:10.209.126.125:443 01-29 15:58:00.083 5486 5525 E chromium_net:external / chromium / net / socket / ssl_client_socket_openssl.cc:792:[0129/155800:ERROR:ssl_client_socket_openssl.cc(792)]握手失败; 返回0,SSL错误代码5,net_error -107 我的应用程序还使用HttpClient和HttpsUrlConnection类来设置SSL连接。 在使用这些类时,我能够使用SSLSocket API来启用特定协议。 http://developer.android.com/reference/javax/net/ssl/SSLSocket.html#setEnabledProtocols(java.lang.String中[]) 我需要对WebViewClient做同样的事情。

Android – 如何在API级别4上拦截Android WebViewClient中的表单POST

我有一个附加到我的WebView的WebViewClient ,如下所示: webView.setWebViewClient(new MyWebViewClient()); 这是我对MyWebViewClient实现: private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { webView.loadUrl(url); return true; } } 我给WebView一个URL,通过loadUrl()加载。 如果我在页面中有一个链接( a href… ),我的shouldOverrideUrlLoading方法被调用,我可以拦截链接点击。 但是,如果我有一个方法为POST的表单,则不会调用shouldOverrideUrlLoading方法。 我在这里注意到类似的问题: http : //code.google.com/p/android/issues/detail? postUrl ,它似乎建议在我的WebView覆盖postUrl 。 但是,此API仅从API级别5开始提供。 如果我在API级别4,我该怎么办? 有没有其他方法来拦截表格post?