【发布时间】:2015-12-28 13:15:53
【问题描述】:
所以我有一个 Android 应用程序,它加载一个包含 <a> 这样的标签的 WebView
<a id="download-7630" href="/files/download/7630" download>someFilename.anyExtension</a>
在应用程序后端的上下文中,文件由连接到 mongoDB 的 java 控制器提供服务。我无法更改服务器代码,因此我需要一个解决方法。它们是返回的 GET 请求 GET
ResponseEntity.ok()
.header("Content-Disposition", "attachment; filename=someFilename.anyExtension")
.contentLength(file.getLength())
.contentType(MediaType.parseMediaType(file.getContentType()))
.body(new InputStreamResource(file.getInputStream()));
我遇到的问题是这个下载标签在浏览器和控制台上运行良好,例如:“资源解释为文档,但使用 MIME 类型应用程序/pdf 传输:“https://XYZDOMAIN/files/download/22306”。但是当我从 WebView 中单击它们时,没有任何事件被触发。
我在 WebViewClient 的shouldOverrideUrlLoading(), onLoadResource(), onPageStarted() and shouldInterceptRequest() 中有调试点,我什么都没有,就像这样形成的标签以某种方式忽略了点击或触摸事件,应用程序中的其他所有内容在 WebView 中都可以正常工作。
(调试点可以正常工作,例如在加载包含链接的站点时,或者在站点中的页面之间导航时)
我的 webView 设置包括:
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setSaveFormData(true);
webSettings.setSavePassword(true);
webSettings.setDatabaseEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setSupportZoom(false);
webSettings.setAllowFileAccess(true);
webSettings.setAllowContentAccess(true);
MyWebViewClient myWebViewClient = new MyWebViewClient();
mWebView.setWebViewClient(myWebViewClient);
MyWebViewClient 只是一个扩展 WebViewClient 的类,我在其中覆盖了我尝试调试的方法
我想要做的是管理服务器发回的文件以启动一个让用户打开文件的意图,但我的问题是我无法拦截任何尝试做的事情那个。
我已经阅读了在 AsyncTasks 中处理下载或添加 DownloadListeners 之类的解决方案,但我的问题是我无法拦截对这些链接(html 标记)的点击。
有什么想法可能是错误的或遗漏的吗?
【问题讨论】:
-
对不起,这个问题与 HTML5 或 MongoDB 有什么关系?这更像是一个 Android 权限,对吧?
-
您对 mongoDB 的看法可能是对的,但由于下载属性是 html5 可能是它与我不知道的 WebView 之间的问题,所以我改变了标签...:/
-
请添加更多答案,mindh's one is not valid
-
@Elkdor 你试过 mWebView.onDownloadListener() 吗?
-
Webview 有一个错误,如果存在下载属性,则阻止锚链接触发操作。见code.google.com/p/android/issues/detail?id=198532
标签: android html android-webview android-download-manager