webview中input file伪造无刷新上传(兼容Android和IOS)
来源:互联网 发布:源码交易平台 编辑:程序博客网 时间:2024/05/17 13:10
由于项目需要在android手机端实现上传图片功能,但不是原生android系统,里面的功能都是通过webview加载的页面实现的。
搜了一下android WebView控件里实现input file 上传的资料,但是上传操作是和form一起提交的,如下代码:
<div data-role="page" id="pageone"><form action="attach.upload" method="post" enctype="multipart/form-data" id="uploadForm" data-ajax="false"> <input type="file" name="img" id="uploadFile" /><input type="submit" value="开始上传" id="upload" /></form></div>
说到这里就感觉跟ajax异步提交很像,就搜了一些异步上传文件的资料,最后发现都不好用。
没办法,后来想了想,我仅仅想把上传照片操作和原来的form分开而已,然后就想到了用iframe,把上传照片的form放在iframe里面,iframe嵌入到外层form表单中不就好了嘛!
想到这里就感觉这种方法很可行,很激动,就去试试。
果然,确实可以上传图片,但是上传图片后的返回结果会显示到iframe里面,而且原来的上传图片form也没有了,这样就不能再次上传图片了,但跟我最终的目标很接近了,于是继续优化,点击上传按钮时触发一个事件,这个事件先给iframe绑定一个onload事件,当图片上传返回结果后会触发onload事件,在事件里处理返回结果并输出到外层form,然后再把iframe的src属性修改为上传图片的页面,这样iframe里又可以上传了。但这种做法会先把结果显示到iframe里面,然后再显示上传图片的form。
再次优化,iframe里的页面只放上传照片按钮和form,将file控件放在外层form,当选择好后,再把file控件复制一份到iframe里,在上传照片就好了,再把iframe大写设置为0就可以不显示了, 这样就实现了伪造无刷新上传。
写的比较乱,将就着看吧,主要是记录一下思路。
贴上部分代码:
iframe加载的上传图片代码index2.html
<div data-role="page" id="pageone"><span style="white-space:pre"></span><form action="attach.upload" method="post" enctype="multipart/form-data" id="uploadForm" data-ajax="false"> <span style="white-space:pre"></span><input type="submit" value="开始上传" id="upload" onclick="parent.iframeLoad();"/></form></div>
外层form里的file代码:
<input type="file" name="img" id="uploadFile" /><input type="button" value="开始上传" id="upload" onclick="submitUploadIframe();"/><iframe width="0" height="0" src="index2.html" frameborder="no" id="fileIframe"></iframe>
js代码部分
//android upload pic beginvar fileValue = "";$("#uploadFile").change(function(){ fileValue = this.value;});function submitUploadIframe(){ if(fileValue == "") return false; var uploadFile = $("#uploadFile"), $clone = uploadFile.clone(true); uploadFile.after($clone); uploadFile.appendTo(window.frames["fileIframe"].document.forms["uploadForm"]); fileValue = ""; $(window.frames["fileIframe"].document).find("#upload").click(); }function iframeLoad(){var iframe = $("#fileIframe")[0];if (iframe.attachEvent){ iframe.attachEvent("onload", function(){ }); } else { iframe.onload = function(){ var resultStr = $(this).contents().text();//获取iframe上传照片后的返回结果<span style="white-space:pre"></span>//......处理结果并输出到外层form里this.onload = function(){};this.src = "index2.html";};} }//android upload pic end
- webview中input file伪造无刷新上传(兼容Android和IOS)
- ajaxfileupload.js结合input[type=file]无刷新上传
- Android WebView 支持H5图片上传<input type="file">
- Android WebView支持Input type=file文件上传
- Android webview Input type=file 文件上传 解决方法
- input file 控制上传文件的大小和格式(兼容ie)
- 自定义input[file](文件上传控件)样式-兼容IE6
- android webview使用html5<input id="input" type="file"/> 上传相册、拍照照片
- 【Android进阶】Android里webview不支持input file的解决方法(上传按钮点击失效的原因)
- Android-WebView-解决对选择文件<input type="file">无响应
- WebView实现html文件选择(input type=file),兼容安卓6.0
- Webview兼容h5的localstorage以及input file标签
- Android:让WebView支持<input type="file"…>元素,实现文件上传
- android Webview支持input type=file
- Android WebView input file 不起作用解决办法
- android Webview支持input type=file
- 上传图片即时显示<input type="file" />(兼容所有浏览器)
- 修改input file文件上传的默认样式 兼容ie8
- 登陆界面和界面跳转
- eclipse快捷键大全
- Android SDK 在线更新镜像服务器资源
- spark总体概况
- Java设计模式--单例模式
- webview中input file伪造无刷新上传(兼容Android和IOS)
- android ExpandableListView的group是一个自定义的布局,折叠图标覆盖布局上的部分内容
- nodejs创建包(建立nodejs工程)
- 5.1.8 Balanced Binary Tree
- 调用iPhone自带的播放器
- jcmd命令使用
- Python中thread 多线程处理
- 如何修改MySql用户密码
- 卡特兰数 大数模板