接上篇Android-WebView集成iScroll4之input框无法获取焦点,发现开始点击列表的标题,下载附件特别好使,直接可以调本地的工具打开附件。
附件下载的做法是服务端的web页面提供a标签,将要下载附件的ftp地址给href,当在android访问这个页面,点击标题对应的链接时,android端会触发webview的DownloadListener事件,去ftp下载附件,并调用本机的软件将其打开。
//设置WebView的DownloadListener: webView.setDownloadListener(new MyWebViewDownLoadListener());
那问题就是web页面的a标签集成iScroll4时无法响应WebView的DownloadListener事件。
上网搜了很多,都没有这方面的问题,奇怪webview做下载没有与iScroll集成的吗?没办法,只能自己一个一个尝试解决了:
1.加a标签过滤不好使
在加入iScroll之前, 这个下载功能很好使,只要一点击a标签,android就能捕获这个事件,但加了iScroll
后这个下载就不好使了,经过与android开发连调打断点,发现根本就不进setDownloadListener这个方法,说明跟input框标签一样被过滤掉了,于是乎在过滤条件里加上a标签:
onBeforeScrollStart: function (e) { var target = e.target; while (target.nodeType != 1) { target = target.parentNode; } if (target.tagName != 'A' && target.tagName != 'INPUT') { e.preventDefault(); } },
这会记得了,清电脑缓存,清手机缓存,发现电脑端不像以前一样,点击a链接就可直接下载,它会跳转到一个新的页面做url重定向,地址栏就是要下载的ftp的路径,但它不会自动下载,我在地址栏一回车,它就开始下载了。手机上测试的效果是直接跳转到一个空白页面,根本不能下载。
分析还是这个a链接被iScroll给禁用了,但是它又能跳转,只是不是android能理解,能捕获的跳转,并不是我要的效果,至于为什么会这样,我也没有找到原因。
加了a标签过滤不好使,又加了好几种包含a标签的什么table,tr,td等,经过测试都不好使,这回连电脑端不好使,说明不是这个原因。
2.采用Iframe分离不好使
然后想怎样让android能够继续捕获这个事件,iScroll和我的数据不是在一整个页面吗,那我就将下载的a链接放到一个Iframe中,每次下拉刷新,上拉加载分页我就加载一个Iframe,按照这个思路小试了一把发现可行,立马就能下载,android断点也进了,事件也响应,但是这个页面太复杂,web页面用的是jsp,有查询,html5的样式,还有一堆的java代码,想要实现iScroll刷新时加载Iframe,并动态改变Iframe中元素的内容,但样式,iScroll刷新的效果都不好,不能适得其反啊,最后又放弃了Iframe的做法,一时也想不出什么好办法,于是就放了几天去搞别的东西了。
3.a链接换成span搞定
到周末一大早出去玩了一天,晚上回来,打开电脑,连上手机测了两把,还是不行,再想想,有什么元素能替换a标签的吗,并且能够让android响应DownloadListener事件,脑子里立马想到了span,但心里还是没底,a标签都不行,span能行?换完后,加上onclick事件,再一测,电脑端立马好了,直接可以下载,不用跳页面,拿手机一测,也好了,不相信,把数据,缓存清了,再测,ok了。再拿别的手机测,都ok,我靠,太神奇了,就是将标签换成span,也不用加过滤就好了。
<%-- <a href="<%=row.getHtmlurl() %>" style="color: #0257b0"> --%>
<span onclick="download('<%=row.getHtmlurl() %>')" style="color: #0257b0">
<table>
<tr>
<td style="word-wrap: break-word; word-break: break-all;"><%=row.getTitle() %></td>
</tr>
</table>
</span>
<%-- </a> --%>
<script type="text/javascript">
function download(url){
window.location.href = url;
}
</script>
我猜除了span,应该还有别的标签也支持android响应webview的DownloadListener事件,这应该是iScroll故意设计的,只是禁用那些具有动态交互的标签如a,input,select等。
至此WebView集成iScroll4碰到的两个问题,都解决了,唉,不容易呀!
相关推荐
Android8.0以下手机自带的android-system-webview版本过低使用
在开发中,有时候我们会在app中使用WebView加载一个web页面。这样可以适当减轻我们开发的难度。但是弊端是WebView中切换html,没有像原生页面的切换效果。这里我们就利用动画,以及 获取网页的快照来实现android ...
Android-X5WebView基本封装和使用 通过OkHttp拦截器、自定义CookieJar有效完成客户端与H5端的Cookie同步管理 监听WebView的加载进度 滚动条的设置(隐藏或者显示,内侧显示还是外侧显示) 优化X5WebView的预加载问题...
Android-----WebView使用
react-native-webview.zip
react-native-android-webview解决React Native自带的WebView组件Android不能拦截URL的问题安装npm install react-native-android-webview --save 本机库链接安卓android/settings.gradle添加到android/settings....
unity-webview-integration-master unity-webview-integration-master unity-webview-integration-master
webview android-javascript
Android -- webview全屏播放HTML video.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
crosswalk-webview 比android原生的webview更好用速度更快,支持富文本显示,能够更好的支持富文本网页
适用于Android项目中webview的缓存,可以指定缓存目录,缓存时间,有问题请加,谢谢
react-native-android-fullscreen-webview 概述 默认情况下,React Native随附的WebView组件无法显示全屏。 该软件包实质上复制了现有的Android版WebView,并添加了一些额外的功能来启用全屏视频。 iOS默认情况下...
Android客户端加载html,实现WebView与Html交互
webview socket 完整版的demo实现,可以支持使用
react-native-web-webview React Native用于RN的WebView的Web实现 入门 $ npm install react-native-web-webview --save 别名打包您的webpack配置中: resolve: { alias: { 'react-native': 'react-native-web...
react-native-webview-bridge, 使用Javascript桥对原生 web view进行响应 查找维护者( s )我一直在忙,我不能继续坚持这个 repo 。 我想问一下,如果有人想帮助我在github和wince上授予一个权限,开始合并许多请求和...
xamarin webview 上传图片C#代码,visual studio2019 安卓,可测试图片
CollapsingToolbar-With-Webview Loading a Pdf inside Webview with Collapsing toolbar, Both PDF Scrolling and COllapsingToobar will work. Screen Shot
WebView的封装,获取标题,获取图片,js支持,内存泄漏处理
解决React-Native的WebView不支持Android选择图片和拍照