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 相关文章推荐
prototype 1.5相关知识及他人笔记
Dec 16 Javascript
js模拟类继承小例子
Jul 17 Javascript
Javascript脚本实现静态网页加密实例代码
Nov 05 Javascript
JavaScript 作用域链解析
Nov 13 Javascript
node.js中的http.createClient方法使用说明
Dec 15 Javascript
js实现纯前端的图片预览
Apr 27 Javascript
javascript中利用柯里化函数实现bind方法
Apr 29 Javascript
Bootstrap学习笔记之css样式设计(2)
Jun 07 Javascript
JS库中的Particles.js在vue上的运用案例分析
Sep 13 Javascript
JavaScript学习笔记之数组基本操作示例
Jan 09 Javascript
微信小程序的tab选项卡的实现效果
May 15 Javascript
通过实例解析JavaScript for in及for of区别
Jun 15 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的开发框架的现状和展望
2007/03/16 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
php实现的双色球算法示例
2017/06/20 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
jquery 实现表单验证功能代码(简洁)
2012/07/03 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
jQuery 三击事件实现代码
2013/09/11 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
使用Node.js实现RESTful API的示例
2017/08/01 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
python搜索指定目录的方法
2015/04/29 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
BONIA官方网站:国际奢侈品牌和皮革专家
2016/11/27 全球购物
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
如何清空Session
2015/02/23 面试题
计算机应用与科学个人的自我评价
2013/11/15 职场文书
节水倡议书范文
2014/04/15 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
十佳青年事迹材料
2014/08/21 职场文书
查摆问题整改措施
2014/10/24 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
工作年限证明模板
2015/06/15 职场文书
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android