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 相关文章推荐
初试jQuery EasyUI 使用介绍
Apr 01 Javascript
WEB高性能开发之疯狂的HTML压缩
Jun 19 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
Nov 28 Javascript
基于JQuery实现相同内容合并单元格的代码
Jan 12 Javascript
浅谈JavaScript中的string拥有方法的原因
Aug 28 Javascript
Bootstrap和Java分页实例第一篇
Dec 23 Javascript
使用cropper.js裁剪头像的实例代码
Sep 29 Javascript
Node实战之不同环境下配置文件使用教程
Jan 02 Javascript
微信小程序自定义音乐进度条的实例代码
Aug 28 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
Aug 30 Javascript
elementUI 设置input的只读或禁用的方法
Oct 30 Javascript
Vue v-bind动态绑定class实例方法
Jan 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.MVC的模板标签系统(三)
2006/09/05 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
php实现统计邮件大小的方法
2013/08/06 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
javascript json 新手入门文档
2009/12/03 Javascript
JavaScript类库D
2010/10/24 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
AngularJS语法详解
2015/01/23 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
2016/10/09 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
Python面向对象class类属性及子类用法分析
2018/02/02 Python
python读取文本中的坐标方法
2018/10/14 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
在django中查询获取数据,get, filter,all(),values()操作
2020/08/09 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
html5表单及新增的改良元素详解
2016/06/07 HTML / CSS
Hunkemöller西班牙:欧洲最大的内衣连锁店
2018/08/15 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
西部世纪.net笔试题面试题
2014/04/03 面试题
销售工作岗位职责
2013/12/24 职场文书
全国道德模范事迹
2014/02/01 职场文书
中学生获奖感言
2014/02/04 职场文书
班委竞选演讲稿
2014/04/28 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
HTTP中的Content-type详解
2022/01/18 HTML / CSS