各位,你们在浏览网站的时候还能看到“模态”对话框吗?(不是那种模拟的,是真实的用showModalDialog这个破玩意儿唤出来的)。你肯定说,现在那个网站还敢这么做呢,不是不想干了就是流氓网站吧,要不就是开发者是一群小白。OK,那么您在浏览网页的时候用“后退”按钮的次数多吗?甚至于依赖后退按钮的功能吗?这是一个真实的事情,关于“模态”对话框和“后退”按钮的事情。
对于showModalDialog这个API,你是不是已经忘记他很久了,或者你直接告诉我:“这个API我根本就没有看过。“那我真是要恭喜你。不仅各个浏览器对其支持不一,行为也不太相同。就算是Modal的最彻底的Internet Explorer,也会有很多莫名其妙的问题。例如,如果你从一个modal Dialog中使用 window.open 打开一个新的窗体,恰巧你用的是IE6,或者使用了 –nomerge 参数启动的高版本 IE,那么可能这个新的窗口和 modal Dialog 处于不同的 session,其 cookie 显然也都是空的。如果你的这个链接需要 Authentication,那么这个新的窗口肯定通不过。QA会非常Kind的给你分配一个BUG编号;又例如,你可能发现使用不同权限的用户登录操作系统 Modal Dialog 的地址栏的显示与否是不一样的;又例如,你可能发现在 Modal Dialog下你没有办法用 Ctrl+C 复制文本!这些问题你可能会遇到,你可能不会遇到,如果你遇到了,相信你的心情一定不会太好。
对于用户来说心情肯定更不好,(我仍旧以Internet Explorer为例,因为它才是真正的 modal,你说我是不是疯了?对不起,这个系统需要承诺支持IE6、7、8、9、将来还有Firefox、Chrome、Safari,是不是很牛?),用户已经习惯了用多个Tab页面进行浏览,现在一个页面弹出出了一个Modal Dialog,令所有的其他页面全部都停止响应了,那心情怎叫一个爽字了得。那么这个网站是不是会遭到用户的抛弃呢?不会的。不但不会,用户还会屏气凝神的在 Modal Dialog中把他/她该干的事情干完,小心翼翼的关掉它,然后再去浏览那些刚才被 Modal Dialog Disable掉的页面。这是为什么呢?因为他在使用一个 E-Learning 系统。
好吧,说到 E-Learning 系统,最常想到的就是考试(对不起,还是叫测验吧,因为基于 Web 的系统,根本放不了作弊)啊,问卷啊这些东西。这些东西有什么不一样呢?他内部状态特别丰富。拿考试来说吧,有一些考试只能够单向作答,也就是你提交了一个答案那你想后悔可就来不及了;有一些考试是有总体时间限制的;有一些考试做了一道题还会给你弹出一个解释层,告诉你你到底是为什么错的;还有一些和心理测验一样,你第2道提选C,那么你就会跳到第4道题,第三道题是不许做的。凡此云云。你说,这种东西最怕什么呢?要我说,最怕的东西莫过于“刷新”和“后退”,实际上,刷新操作的处理还算比较容易,因为提交一道题的答案,这种东西是没有状态的刷就刷把,至于客户端那些内部状态的保持……总之你还能够想些招数出来,那么再加上“后退”呢?我觉得除非你把所有的状态全都移动到服务端去,否则你的客户端脚本可能真是有点儿不好办了(我们更倒霉,还遇上了脚本错误,这肯定是在设计的时候考虑不够的原因)。
我们可以发挥一下想象力,考虑一下我们“专业”的浏览器使用习惯,然后说,没关系,告诉用户,别用“刷新”(F5)和后退(Alt+ |