接上篇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版本过低使用
而WebView则是Android系统中的一个组件,它允许开发者在应用程序中嵌入网页内容,实现类似浏览器的功能。 **PHP** 是“超文本预处理器”的缩写,是一种解释型的、面向对象的、通用的脚本语言。在Web开发中,PHP常...
在实际开发中,你可以通过引入`crosswalk-webview-14.43.343.23-arm`这样的库文件,将Crosswalk-WebView集成到Android项目中。这个特定版本是针对ARM架构的设备,包含了特定版本的Crosswalk-WebView,确保在相应设备...
在开发中,有时候我们会在app中使用WebView加载一个web页面。这样可以适当减轻我们开发的难度。但是弊端是WebView中切换html,没有像原生页面的切换效果。这里我们就利用动画,以及 获取网页的快照来实现android ...
Android-X5WebView基本封装和使用 通过OkHttp拦截器、自定义CookieJar有效完成客户端与H5端的Cookie同步管理 监听WebView的加载进度 滚动条的设置(隐藏或者显示,内侧显示还是外侧显示) 优化X5WebView的预加载问题...
在Android开发中,有时我们需要利用第三方库来增强应用的功能,比如WebView。WebView是Android系统提供的一种用于在应用程序中展示网页内容的组件,但它的功能相对有限。这时,我们可以选择集成Cordova来提升WebView...
总的来说,"xamarin-android-webview-upload.7z" 示例项目展示了如何在 Xamarin Android 应用中集成图片上传功能,利用 C# 代码和 Web 视图组件,为用户提供一个无缝的原生应用体验。理解并实践这个示例将有助于...
在本DEMO中,"Android-WebSocket-WebView"着重展示了如何在Android应用中集成WebSocket功能,并利用WebView加载网页,实现客户端与服务器的实时交互。这个项目对于理解WebSocket与Android WebView的结合使用具有重要...
4. **注入JavaScript代码**:在渲染网页前,可以注入JavaScript代码,用于自定义网页行为或者处理特定事件。 5. **安全配置**:可以设置允许或禁止JavaScript执行,以及启用或禁用其他Web内容的安全策略。 6. **...
react-native-android-fullscreen-webview 概述 默认情况下,React Native随附的WebView组件无法显示全屏。 该软件包实质上复制了现有的Android版WebView,并添加了一些额外的功能来启用全屏视频。 iOS默认情况下...
uni-webview.js
《Crosswalk-WebView:构建高性能Android Web应用的关键》 Crosswalk-WebView,作为一个开源项目,是Google Chrome浏览器的分支,旨在为Android应用提供一个稳定且高性能的Web运行环境。它替代了Android系统自带的...
react-native-android-webview解决React Native自带的WebView组件Android不能拦截URL的问题安装npm install react-native-android-webview --save 本机库链接安卓android/settings.gradle添加到android/settings....
在Android开发中,Webview是一个非常重要的组件,它允许我们在应用程序内部嵌入网页内容,提供类似于浏览器的功能。本文将深入探讨如何在Android的Webview中实现缓存功能,包括指定缓存目录、设置缓存时间等关键知识...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中加载和显示网页内容。WebView不仅能够呈现HTML、CSS和JavaScript,还支持与Android原生代码进行交互,从而实现更丰富的功能。本篇文章将深入...
《Unity与WebView集成详解》 在移动应用开发中,Unity引擎以其强大的3D图形渲染能力和跨平台特性,被广泛应用于游戏开发。然而,有时我们还需要将网页内容嵌入到Unity应用中,这时就需要用到Unity与WebView的集成。...
首先,WebView是Android SDK中的一个类,它允许开发者在应用程序中加载和显示网页。通过WebView,我们可以实现与网页的交互,例如点击链接、表单提交等,而无需离开应用程序。对于HTML5视频的支持,WebView通过内置...
### Android中的WebView组件详解 #### 一、WebView概述与特性 WebView是Android SDK中的一个重要组件,它基于WebKit渲染引擎,允许在应用内部加载和显示网页。WebKit最初是苹果公司在KDE的KHTML基础上开发的,其...
2. **文件上传在Android上的挑战**:在Android中,原生WebView并不提供监听`input[type=file]`的事件,因此无法调用系统的文件选择器。这对于需要用户选择本地文件的应用来说是一个明显的短板。 3. **自定义解决...
webview全称叫做Android System WebView,它是Android生态系统的重要组成部分,也是Chrome浏览器的内核。可以让你的手机变得瞬间畅通,它会及时优化网页相关数据,有着接入式的操作体验数据,各种类型的应用程序可...