Android-WebView集成iScroll4之无法响应DownloadListener事件
接上篇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碰到的两个问题,都解决了,唉,不容易呀!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。