Articles of webviewclient

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?

Android WebViewClient onReceivedError不会被调用为404错误

嗨 在列表视图中,我有一个webview应该从服务器加载图像文件,当没有图像存在,我需要一个虚拟的形象。我试过 holder.image.setWebViewClient(new WebViewClient() { @Override public void onReceivedError( WebView view, int errorCode, String description, String failingUrl) { System.out.println("description error" + description); view.setVisibility( View.GONE ); } @Override public void onPageFinished(WebView view, String url) { view.setVisibility( View.VISIBLE ); } }); 我有一个虚拟的图像在一个FrameLayout的webview,onPageFinished监听器被调用后,每个图像的URL加载,但onReceivedError不会调用一个URL产生一个404错误。任何猜测如何做到这一点。

禁用Android WebView / WebViewClient发起的favicon.ico请求

当我调用WebView.loadUrl()时,如何禁用Android WebView / WebViewClient发送对favicon.ico的请求? 通过CharlesProxy分析请求时,我可以看到正在进行的调用。 我不拥有我在WebView中显示的HTML内容。 我的研究已经从服务器端出现了很多解决方法的结果,但是这些对我来说不起作用。

WebView.loadUrl()中的Android JS

我想在WebView中加载一个网页,但删除网页的一部分。 所以,我创build了一个自定义的WebViewClient。 而在onPageFinished(),我做了一些JavaScript来删除一些元素。 然后,我使WebView可见。 但是,当我运行它,它将视图设置可见,然后我看到被删除的元素。 就好像JS在非常缓慢的背景下运行一样。 它会产生糟糕的观看体验,因为它会闪烁整个页面,然后闪烁所需的部分页面。 这是我的onPageFinished() @Override public void onPageFinished(WebView view, String url) { view.loadUrl("javascript:" + "document.getElementsByClassName('header')[0].style.display='none';" + "document.getElementById('section_0').style.display='none';" + "document.getElementById('page-actions').style.display='none';" + "document.getElementsByClassName('languageSelector')[0].style.display='none';" + "document.getElementById('mw-mf-last-modified').style.display='none';" + "document.getElementById('footer').style.display='none';"); loadingView.setVisibility(View.INVISIBLE); view.setVisibility(View.VISIBLE); } 有想法该怎么解决这个吗?