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碰到的两个问题,都解决了,唉,不容易呀!

你可能感兴趣的:(android,iframe,webView,iScroll)