AsyncBox是一款比较好用的JS弹窗插件,虽然目前官网已经宣布重构改善,但在快速和不复杂的开发中,还是一款比较好用的插件。
AsyncBox(异步盒子)是基于 jQuery 的弹窗插件。能够实现网站的整体风格效果,给用户一个新的视觉享受。主要模拟常用的 alert、confirm、prompt、open 和扩展了一些对话框。它通过回调函数触发事件动作并执行,使操作区域更加明了、统一。而且能够在主流浏览器中灵活运用。
AsyncBox主要有以下特点:
一、AysncBox 集成了 alert、confirm、prompt、open 和扩展了一些对话框;
二、支持静止定位、自定义位置、自动修复位置。极大的灵活性;
三、支持无限极层叠 iframe 框架或 frameset 框架集调用;
四、调用方式简单,API齐全;
五、支持IE6及大多数浏览器;
六、支持皮肤。
由于目前官网已经宣布重构改善,所以AsyncBox目前最新的版本是[2011-9-15] AsyncBox v1.4.5,让我们去看看它最新的更新日志:
- 新增
1、增加 HTML 模式中显示 DOM 元素内容的支持。
- 调整
1、修改了拖动算法,减少窗口因为被限制在可视范围内对页面的遮挡。
2、去除了对话框类与内容窗口中 $ 的部分简写支持,以免发生冲突。
3、去掉了对话框类左上角的图标。
4、open 中 url 模式弹出的页面中无需加 top。
- 修复
1、修复窗口大于浏览器可见范围时看不到标题的 BUG。
2、修复 IE6 下,某些窗口无法遮住 select 的 BUG。
3、修复 url 与 data 参数配合时最终拼接错误的 BUG。
- 更名
参数配置:
1、Fixed 为 open 私有,且更名为 fixed。
2、autoReset 为 open 私有,且更名为 reset。
3、icon 为 open 私有,且更名为 logo。
4、clone 归为 drag ,在 drag : { clone : true } 使用。
辅助函数:
1、$.box() 方法更名为 $.opener()。
2、$.asyncbox() 更名为 $.exist()。
3、$.iframe() 更名为 $.framer()。
open选项:
1、scrolling 更名为 scroll。
2、closeType 更名为 cache。
常见问题:
可以。在遵循相关协议的条件下,AsyncBox 无偿的提供给大家永久免费使用权。
AsyncBox 的文件编码是 UTF-8 的,在遇到其他编码类型时可能会出现乱码现象,解决办法可以在引用 AsyncBox 时加上 charset=”utf-8″。例如:<script type=”text/javascript” src=”AsyncBox.js” charset=”utf-8″></script>
AsyncBox 对事件的操作是通过回调函数实现的,模拟不了阻塞,所以无法支持这种调用方式。
很遗憾,在历来更新 AsyncBox 中都没有提到支持“最大化”,但是可以通过 width、height 配置一个全屏的窗口,在 resize 中使用 $.size 修复。这样至少可以弥补一下缺陷。另外 AsyncBox 当然不会放弃这个支持,在往后的版本中将看到。
目前 AsyncBox 对手机浏览产生的不理想效果没有做相关定制。不建议在 IPAD 移动设备中使用 AsyncBox 集成开发。
系统本身对中文字体的解析就那样。如果想达到更理想的视觉效果,可以了解相关的系统美化资源。
在内容页或者在 iframe 内中不需要事件触发调用 AsyncBox 时,例如“parent.asyncbox.alert(‘Hello AsyncBox !’);”,这样会报“缺少对象”的错误,原因是内容页未加载完毕。解决方案为:setTimeout(function(){parent.asyncbox.alert(‘Hello AsyncBox !’);},1000); 推荐延迟加载,尽量避免 AsyncBox 和页面同时加载,既等页面加载完毕后再弹出也不迟。
AsyncBox 的构建内核使用了 table 和 部分 a 标签,如果你对 table 和 a 标签进行了全局样式设置的话,可能会对 AsyncBox 造成影响。虽然 AsyncBox 也内置固化了部分样式,但总的来说设置全局样式并不是很好的编码习惯,所以建议尽量避免定义全局样式的写法。
避免内容出现连续没有空格的字符串,如 “StringStringStringStringStringStringString…”。
FLASH 相对比较特殊,如果需要遮住它的话,由开发人员决定在引用 FLASH 时是否加入 <param name=”WMode” value=”Transparent”> 参数。
缺少文档声明<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>。另外,避免在声明顶部出现 UFO。
AsyncBox 目前就内置了一款 ZCMS 的透明皮肤,在 IE6 下需要对 asyncbox.css 文件中注释为 /*ie6 filter*/ 下的路径做绝对于当前页面的路径配置。例如:src=’asyncbox/skins/ZCMS/images/ie6/dialog_lt.png’,asyncbox.html && asyncbox文件夹,即文档页面与 asyncbox 文件夹呈同级目录。
出现此类错误,请检查你配置的插件路径是否正确。
按钮做了 disabled 处理,简单保证了事件单次执行,避免重复执行。执行完毕后会变为可用状态。如果按钮按下后变为不可用,那说明在执行的过程中出错了,请检查你的代码。
IE 下在配置 $.open(…) 参数时避免参数配置中缺少逗号或者最后一个参数后面出现逗号。
关于 CHM 帮助文档无法显示问题,由于系统安全性的影响,可能会造成某些 CHM 帮助文档无法显示页面内容。
解决方法:
1)右键文档 – 解除锁定。
2)打开文档时选择“运行”。
如还未能解决就百度或谷歌了。
检查是否存在相同的ID。
操作流程遇到的问题:
AsyncBox 的回调函数处理机制为 callback 在 callback 中可以使用 this.id 得到当前 AsyncBox 的 ID。如果该 AsyncBox 被嵌套使用,那么 this 对象会被子 AsyncBox 覆盖,此时需得到正确的 ID ,则需将 this 对象存起来,例如:var id = this.id; 再用。 另外对话框类窗口ID为 asyncbox_ + [alert,confirm,success,error,prompt]。
可以用自带的按钮操作子页面,也可以在子页面中自己新建按钮,但记住的是:页面刷新的话就调用不了部分JS了。
在判断 action 值内加入需要刷新页面的代码“window.location.reload()”。内容页刷新父页面:“top.window.location.reload()”。
通过 AJAX。