Articles of webviewclient

使用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); } 有想法该怎么解决这个吗?

WebView – 无法下载文件,而不需要两次?

如果我使用DownloadListener侦听,那么在浏览器已经请求它之后 ,我会得到我需要的URL。 浏览器已经打开了一个连接到URL(这是如何知道这是一个下载),为什么不能通过我的连接? 我也尝试将自定义的WebViewClient分配给WebView并在请求之前使用shouldOverrideUrlLoading来捕获URL。 以这种方式下载文件,我在浏览器之前请求每个URL,并由它的Content-Type决定是否下载,如果是,则从已经打开的连接下载,否则closures连接并指示浏览器加载它,浏览器…再次请求它。 另外,在shouldOverrideUrlLoading我没有告诉我应该使用哪种方法和什么cookie来请求给定的URL。 我怎样才能不必要地请求两次,仍然可以用WebView下载文件?

添加WebViewClient时,Android WebView忽略target =“_ blank”

我正面临着一个奇怪的问题。 在我的应用程序中,我需要加载一个静态HTML文件,基于WebView从资产文件夹中单击button。 现在在5个html文件中,一个html文件包含15个静态链接。 这些链接需要将用户redirect到移动浏览器中提到的url。 我在我的html文件中使用了target="_blank" 。 <div class="lid"><a href="https://www.irctc.co.in/" target="_blank">Railway Reservation </a></div> 现在,在没有任何WebViewClient添加到WebView的示例应用程序中,这可以正常工作。 但是我需要一个WebViewClient来处理其他的function。 那么当时target="_blank"完全被忽略了。 url在WebView中打开。 我发现一个解决方法,我可以使用shouldOverrideUrlLoading如下: myWebView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub if(url.equalsIgnoreCase("https://www.irctc.co.in/")) { view.getContext().startActivity( new Intent(Intent.ACTION_VIEW, Uri.parse(url))); return true; } else return super.shouldOverrideUrlLoading(view, url); } }); 所以这是在默认浏览器中打开特定的url。 所以基本上我的问题是: 为什么在我们使用WebViewClient忽略target="_blank" ? 那么这个问题还有其他解决方法吗? 因为我有15个链接,我需要比较。 我无法在新浏览器中加载所有url,因为有几个链接需要在同一个WebView中打开。

在WebView中打开PDF

我想在我的WebView中打开一个PDF,并且在这个论坛上find并合并代码。 但它捕捉到“找不到PDF应用程序”,尽pipe我已经安装了多个PDF应用程序,包括Adobe Reader。 这里代码: private class PsvWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); if (url.contains(".pdf")) { Uri path = Uri.parse(url); Intent pdfIntent = new Intent(Intent.ACTION_VIEW); pdfIntent.setDataAndType(path, "application/pdf"); pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); try { startActivity(pdfIntent); } catch(ActivityNotFoundException e) { Toast.makeText(PsvWebViewActivity.this, "No PDF application found", Toast.LENGTH_SHORT).show(); } catch(Exception otherException) { Toast.makeText(PsvWebViewActivity.this, "Unknown error", Toast.LENGTH_SHORT).show(); […]

停止在webViewClient加载

在我的WebView中,我有多个链接头。 在离线模式下,我不能允许重新加载页面,并保持该页面,然后通知用户关于互联网连接。 如果点击其他链接,我可以在加载之前使用shouldOverrideUrlLoading来捕获链接。 但是,如果我点击相同的链接, shouldOverrideUrlLoading不会被解雇,而是首先调用onLoadResource方法。 在那个方法中,我尝试了webView.stopLoading(); 但它继续工作并触发onReceivedError方法,并在页面上显示错误报告。 这是我的WebClient: webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if(MyApplication.getInstance().isOnline()) { return false; } Toast.makeText(getApplicationContext(), "Please check Internet connection and try again.", Toast.LENGTH_SHORT).show(); return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.i("ON_PAGE_START", "RUNNING ============>" + url); if (MyApplication.getInstance().isOnline()) { super.onPageStarted(view, […]

多次调用onPageStart,onPageFinished不调用单页

我的问题是从这个不同的家伙..我wany我的进度对话框开始页面加载开始和结束时,页面加载完成在我的web视图。 我的问题是进度对话框开始,永远不会被解雇。我已经设置了断点,它表明进度对话框开始并被解散了很多次,然后开始,甚至在页面加载完成后也不会被解雇。 我的问题是为什么onPageStarted执行多次单页面加载? 为什么在页面加载完成后不调用onPageFinished? myWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { myWebView.loadUrl(url); return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(myWebView, url, favicon); Log.d("mytag","Page Loading Started"); //myURLProgressDialog= ProgressDialog.show(WebviewExampleActivity.this, "Page Loading", "Wait for a moment…"); } @Override public void onPageFinished(WebView view, String url) { Log.d("mytag","Page Loading Finished!"); super.onPageFinished(myWebView, […]