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高级程序设计 阅读笔记(四) ECMAScript中的类型转换
Feb 27 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
Sep 03 Javascript
推荐一个封装好的getElementsByClassName方法
Dec 02 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
May 26 Javascript
js数组去重的方法汇总
Jul 29 Javascript
javascript动态生成树形菜单的方法
Nov 14 Javascript
详解JavaScript基于面向对象之创建对象(2)
Dec 10 Javascript
Jquery操作cookie记住用户名
Mar 29 Javascript
微信小程序 swiper制作tab切换实现附源码
Jan 21 Javascript
node+koa实现数据mock接口的方法
Sep 20 Javascript
微信小程序 网络通信实现详解
Jul 23 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
May 06 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下载文件的详解
2013/06/02 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
2014/09/22 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
在vs2010中调试javascript代码方法
2011/02/11 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
采用call方式实现js继承
2014/05/20 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
Bootstrap基本样式学习笔记之表格(2)
2016/12/07 Javascript
js生成随机颜色方法代码分享(三种)
2016/12/29 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
[00:37]DOTA2上海特级锦标赛 OG战队宣传片
2016/03/03 DOTA
python实现的阳历转阴历(农历)算法
2014/04/25 Python
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
CSS中的字体大小设置属性总结
2016/05/24 HTML / CSS
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
weblogic面试题
2016/03/07 面试题
会计专业自荐信
2013/12/02 职场文书
商务主管岗位职责
2013/12/08 职场文书
2015年体检中心工作总结
2015/05/27 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
小学思品教学反思
2016/02/20 职场文书
优秀党员先进事迹材料2016
2016/02/29 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书