经常用到上传图片即时预览的功能,实现方式很多,用flash+js实现的比较多,今天遇到同事不想用flash之类也不想用网上的插件,那么我给了他一种解决办法:
思路:
1. 页面上传图片的部分放到一个ifr a me中,ifr a me设置无边框无滚动条,和所嵌入的页面风格一致,根据需要设置固定大小
2. 在ifr a me中提交上传图片的表单,提交后再次返回原页面(ifr a me所指向的页面)并从服务器带回刚上传的图片地址,调用父页面的js代码加载图片
3. 如果用到要进度条等效果,就在表单提
在非html5的情况下是无法用ajax把文件推送到后端的,只能通过form表单提交。但是form表单提交后浏览器会根据响应头与状态码对当前页面进行渲染、下载或跳转等行为,返回text、html、json等类型的内容时浏览器会对当前页面进行渲染,相当于刷新。
所以基本思路很简单,提交上传文件表单时,让浏览器转移到ifr a me处理响应信息,响应信息嵌入一段js代码,这段js代码调用当前页面的一个方法就可以实现回调,类似于xss攻击。
这时就要用到form表单的target属性,我们这里只需要用到
ifr a me跨域通信
查看演示 源码下载
众所周知,由于前端javascr ipt对跨域访问做了安全限制,javascr ipt只能访问与包含它的文档在同一域下的内容。
用法举例:
需求是在http://www.demo.org/top.html中通过ifr a me方式嵌入http://www.ifr a me.com/ifr a me.html,而在ifr a me页面中希望通过点击一个按钮,调用top页面的一个js方法。
1. 在top页面中建立方法供内部页面使用
1.同域相互访问
假设A.html 与 b.html domain都是localhost (同域)
A.html中ifr a me 嵌入 B.html,name=myframe
A.html有js function fMain()
B.html有js function fifr a me()
需要实现 A.html 调用 B.html 的 fifr a me(),B.html 调用 A.html 的 fMain()
A.html
<!DOCTYPE HTML PUBLIC -//W3C/
一、前言
我页面用的是EasyUI的弹出窗口里面嵌入一个ifr a me。
第一:父窗口打开子窗口是一个新增用户信息的ifr a me子页面,点击保存后,子窗口ifr a me则去调用父窗口的function closeAddWindow()方法,让父窗口去关闭新增页面;
第二:父窗口打开一个设置用户权限的ifr a me子窗口,首先打开这个子窗口会全部加载数据库表中所有的存在的权限,然后子窗口需要把加载的权限信息拼接html Append到一个ID为上,这里有个问题就是父窗口打开子窗口加载所