JS实现网页抢购功能(触发,终止脚本)


Posted in Javascript onNovember 27, 2017

以下我们是通过chrome浏览器的开发者功能,实现如何用JS代码完成抢购功能以及如何通过chrome浏览器调试并加载自己写的JS。

身为一名前端开发工程师,有时候业务场景是无法用手速模拟的,老司机也有翻车的时候【你懂得】。因此我特意写这一篇文章,希望能够对大家有所帮助。

涉及到的内容:

1.chrome浏览器
2.js代码
3.函数节流

第一步

打开chrome浏览器,使用组合键Ctrl+shift+i打开开发者工具,接下来如图所示。JS实现网页抢购功能(触发,终止脚本)

点击snippets

第二步

如图所示

JS实现网页抢购功能(触发,终止脚本)

点击new snippet -->输入脚本‘名称'-->Ctrl+s保存。

第三步

如图所示

JS实现网页抢购功能(触发,终止脚本)

选择新创建的脚本‘名称',在如图所示的第二步进行编辑js代码。最后如第三步所示:run 运行代码。

js脚本代码

1.以下是网站上的代码:

<body>
    <div class="box">
      <img class="img" src="image/pict.png" />
      <button class="btn" id='btn'>抢购</button>
    </div>
    <script type="text/javascript">
      /**
       * 抢购按钮
       * 
       * */
      btn.onclick=function(){
        console.log('抢购成功!');
      };
    </script>
  </body>

每次点击抢购 控制台输出 抢购成功!

2.脚本代码

/**
* 最简单的脚本代码
* 版本1.0.1
*/
btn.click();//触发按钮执行click事件

/**
 * 使用for循环执行抢购的脚本代码
 * 版本1.0.2
 * */
for(var i=0;i<100;i++){
  btn.click();
}

通过上边的脚本js代码可以知道,我们可以在chrome浏览器内置脚本,并控制执行。

JS实现网页抢购功能(触发,终止脚本)

当开发人员模拟真实环境的高并发情况,咱们就可以使用这种脚本的方式模拟测试。通过刚刚的脚本我们发现我们开发的页面中的js是有很多问题的。假设【抢购按钮】触发的是请求数据接口。则会出现在一个时间内发出n个请求。处理这个问题可以参考防止重复提交

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>防止ajax重复提交</title>
  </head>
  <body>
    <button id="btn">提交</button>
    <script>

      /**
       * 模拟ajax提交
       * @fn 回调函数
       * */
      function Ajax(fn){
        setTimeout(function(){
          var data= {result:true,msg:'提交成功!'};
          fn(data);
        },2000);
      }
      /**
       * btn click 提交事件
       * 
       * */
      btn.onclick=function(){
        //检查 按钮是否被锁住,锁住直接rerun
        if(btn.getAttribute('lock')){
          return;
        }
        //上锁
        btn.setAttribute('lock',1);
        //更改状态
        btn.innerText='提交中...';
        //模拟ajax提交
        Ajax(function(data){
          //请求成功
          if(data.result){
            console.log('请求成功');
            //请求成功解锁
            btn.setAttribute('lock',"");
            //还原状态
            btn.innerText='提交';
          }else{
            console.log('请求失败');
            //请求失败解锁
            btn.setAttribute('lock',"");
            //还原状态
            btn.innerText='提交';
          }
        });
      }
    </script>
  </body>
</html>

作者:java-script
链接:https://juejin.im/post/59bf6b6ff265da064261ba47
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

也可以使用函数节流方式处理。如下代码:

//网站上写的代码
/**
 * 抢购按钮
 * 
 * */
btn.onclick=function(){
   throttle(function(){
    console.log('抢购成功!');
  },500);
};
/**
 * 函数节流
 * @fn {function} 回调函数
 * @time {number} 时间,毫秒
 * 
 * */
function throttle(fn,time){
  if(throttle.id){
    clearTimeout(throttle.id);
  };
  throttle.id=setTimeout(function(){
    fn();
  },time||200);
}

通过以上方式我们可以过滤掉恶意循环触发事件。这种函数节流方式也得到大家的一致认可与推广。

总结

通过上述方式,我们不仅学会了制做简单的js脚本,也学到一种简单的阻止js脚本的方法。想要真正的写一些有用的js脚本还需要你们自己努力哦!想要正在屏蔽掉恶意的js脚本,单纯的使用前端技术其实是有很大的难度!特此献给那些正在努力学习前端并想在前端的道路上越走越远的童鞋们。祝福你们。

Javascript 相关文章推荐
JavaScript中的连字符详解
Nov 28 Javascript
文本框水印提示效果的简单实现代码
Feb 22 Javascript
js获取日期:昨天今天和明天、后天
Jun 11 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
Oct 30 Javascript
js模仿java的Map集合详解
Jan 06 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
Feb 25 Javascript
jQuery鼠标事件总结
Oct 13 Javascript
vue2项目使用sass的示例代码
Jun 28 Javascript
浅谈在koa2中实现页面渲染的全局数据
Oct 09 Javascript
layui 优化button按钮和弹出框的方法
Aug 15 Javascript
Vuejs监听vuex中值的变化的方法示例
Dec 02 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
Sep 27 Javascript
JS基于贪心算法解决背包问题示例
Nov 27 #Javascript
基于vue.js的分页插件详解
Nov 27 #Javascript
webpack构建换肤功能的思路详解
Nov 27 #Javascript
vue实现商城上货组件简易版
Nov 27 #Javascript
修改UA在PC中访问只能在微信中打开的链接方法
Nov 27 #Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
Nov 27 #Javascript
vue实现商城购物车功能
Nov 27 #Javascript
You might like
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
PHP分享图片的生成方法
2018/04/25 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
jQuery示例收集
2010/11/05 Javascript
jquery each()源代码
2011/02/14 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
详解js的六大数据类型
2016/12/27 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
python实现ID3决策树算法
2017/12/20 Python
python实现抖音视频批量下载
2018/06/20 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
python 画函数曲线示例
2019/12/04 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
咖啡店自主创业商业计划书
2014/01/22 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
母亲节演讲稿
2014/05/27 职场文书
学校春季防火方案
2014/06/08 职场文书
元旦标语大全
2014/10/09 职场文书
员工辞退通知书
2015/04/17 职场文书
Redis 异步机制
2022/05/15 Redis
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python