Articles of webviewclient

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, […]

如果证书是从特定的自签名CA签名的,请检查WebViewClient的onReceivedSslError()方法

我想覆盖WebViewClient的onReceivedSslError() 。 这里我想检查error.getCertificate()证书是否由自签名的CA签名, 只有在这种情况下才调用handler.proceed() 。 在伪代码中: @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { SslCertificate serverCertificate = error.getCertificate(); if (/* signed from my self-signed CA */) { handler.proceed(); } else { super.onReceivedSslError(view, handler, error); } } 我的CA的公钥保存在名为rootca.bks的BouncyCastle资源中。 我能怎么做?

WebView崩溃java.io.IOException:closures失败: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) 有谁知道它是如何发生的?或者如何解决?