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 参考教程
Dec 29 Javascript
js列举css中所有图标的实现代码
Jul 04 Javascript
jquery阻止后续事件只执行第一个事件
Jul 24 Javascript
JavaScript类型系统之基本数据类型与包装类型
Jan 06 Javascript
js判断价格,必须为数字且不能为负数的实现方法
Oct 07 Javascript
js字符串操作总结(必看篇)
Nov 22 Javascript
jQuery ajax请求struts action实现异步刷新
Apr 19 jQuery
详解Bootstrap 学习(一)入门
Apr 12 Javascript
vue-test-utils初使用详解
May 23 Javascript
Layui实现数据表格默认全部显示(不要分页)
Oct 26 Javascript
js实现的订阅发布者模式简单示例
Mar 14 Javascript
vue实现把接口单独存放在一个文件方式
Aug 13 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
解析php5配置使用pdo
2013/07/03 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
Yii框架实现图片上传的方法详解
2017/05/20 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
原生JS实现天气预报
2020/06/16 Javascript
[05:56]第十六期——新进3大C之小兔基
2014/06/24 DOTA
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
Python的垃圾回收机制深入分析
2014/07/16 Python
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
Python并行分布式框架Celery详解
2018/10/15 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
车辆工程专业求职信
2014/06/14 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
大学生求职意向书
2015/05/11 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
赤壁观后感(2)
2015/06/15 职场文书
初中军训感想
2015/08/07 职场文书
中学语文教学反思
2016/02/16 职场文书