当前位置:   article > 正文

【AmazeUI】AmazeUI的确定框与确定框的致命缺陷_amaze-ui 漏洞

amaze-ui 漏洞

在AmazeUI这个手机前端框架可以通过以下的脚本:

  1. function calculate(){
  2. $('#confirm1').modal({
  3. });
  4. }

来触发在HTML已经如下布局的确定框:

  1. <div class="am-modal am-modal-alert" tabindex="-1" id="confirm1">
  2. <div class="am-modal-dialog">
  3. <div class="am-modal-bd">确定框内容</div>
  4. <div class="am-modal-footer">
  5. <span class="am-modal-btn" data-am-modal-confirm>确定</span>
  6. <span class="am-modal-btn" data-am-modal-cancel>取消</span>
  7. </div>
  8. </div>
  9. </div>

这种确定框已经在《【AmazeUI】在模态框中嵌入表单,形成模态输入框》( 点击打开链接)详细介绍过了。下面以一个例子,重点说说这个确定框的致命缺陷。

如下的一个HTML布局:

  1. <!--使用HTML5开发-->
  2. <!doctype html>
  3. <html class="no-js">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  6. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  7. <!--自动适应移动屏幕-->
  8. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  9. <!--优先使用webkit内核渲染-->
  10. <meta name="renderer" content="webkit">
  11. <!--不要被百度转码-->
  12. <meta http-equiv="Cache-Control" content="no-siteapp"/>
  13. <!--以下才是引入amazeui资源-->
  14. <link rel="stylesheet" href="assets/css/amazeui.min.css">
  15. <link rel="stylesheet" href="assets/css/app.css">
  16. <!--引入js的时候要注意,必须先引入jQuery,再引入amazeui,因为这个框架是基于jQuery开发的-->
  17. <script src="assets/js/jquery.min.js"></script>
  18. <script src="assets/js/amazeui.min.js"></script>
  19. <title>AmazeUI模态框</title>
  20. </head>
  21. <body>
  22. <input type="text" id="num1" />+<input type="text" id="num2" /><button onClick="calculate()">=</button><span id="result"></span>
  23. <!--警告框-->
  24. <div class="am-modal am-modal-alert" tabindex="-1" id="confirm1">
  25. <div class="am-modal-dialog">
  26. <div class="am-modal-bd">确定计算吗?</div>
  27. <div class="am-modal-footer">
  28. <span class="am-modal-btn" data-am-modal-confirm>确定</span>
  29. <span class="am-modal-btn" data-am-modal-cancel>取消</span>
  30. </div>
  31. </div>
  32. </div>
  33. </body>
  34. </html>
如下的一个脚本:

  1. <script>
  2. function calculate(){
  3. var num1=$("#num1").val();
  4. var num2=$("#num2").val();
  5. if(isNaN(num1)||isNaN(num2)||!num1||!num2)
  6. alert("任意一个不是数!");
  7. else{
  8. var result=parseFloat(num1)+parseFloat(num2);
  9. }
  10. $('#confirm1').modal({
  11. onConfirm: function(){
  12. alert("num1的值为:"+num1);
  13. alert("num2的值为:"+num2);
  14. $("#result").html(result);
  15. }
  16. });
  17. }
  18. </script>
本来是希望达到如下的效果,做一个加法器,在做加法之后,给出用户的一个提示,询问是否计算?


但实际运行结果大家看到了,第一次运行的时候,脚本获取到值是正确,但是第二次运行的时候还是第一次运行的值。

根据AmazeUI官网的资料说明,是因为基于性能的考虑,这样的模态框只保存第一次运行的值。这样是非常致命的!正如上面的一些场合,在用户增删改查之前,希望通过先确定的方法,来问用户是否执行操作,但是,由于AmazeUI这样的所谓的性能考虑,导致无法达到多次更新函数数值的效果。

虽然官网中提出了设置通过relatedTarget这个钩子获取数据,该元素为桥梁获取想要的数据等一系列的方式(点击打开链接

但是实质操作很不理想,至少设置了relatedTarget之后,还无法与Ajax正确交互。

我也曾想过,写成这样行不行能呢:

  1. <script>
  2. function calculate(){
  3. $('#confirm1').modal({
  4. onCancel: function() {
  5. return false;
  6. }
  7. });
  8. //写你要执行的东西……
  9. }
  10. </script>
然而,这并没有什么卵用 抓狂……还没有等用户点击确定,则执行下面的内容了。不会像alert();打断脚本。

这个对话框,还不如JavaScript原生态,兼容任何浏览器的对话框,这个对话框在UC、手机自带的浏览器有效,视觉效果还不错。

  1. if(confirm("提示框内容")){
  2. //用户点确定之后的内容
  3. }
  4. else{
  5. //用户点取消之后的内容
  6. }

都不知道AmazeUI怎么搞的?什么基于性能考虑?明明连功能都没有实现好,就性能考虑,我只能呵呵了再见害得我还以为是后台那些神级什么缓存机制与Ajax出了问题。居然还有剔除作用域的做法,根本就不符合编程思想。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/249387
推荐阅读
相关标签
  

闽ICP备14008679号