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 相关文章推荐
兼容多浏览器的字幕特效Marquee的通用js类
Jul 20 Javascript
JavaScript 获取当前时间戳的代码
Aug 05 Javascript
使用jquery实现select添加实现后台权限添加的效果
May 28 Javascript
自动刷新网页,自动刷新当前页面,JS调用
Jun 24 Javascript
JQuery实现鼠标移动到图片上显示边框效果
Jan 09 Javascript
纯jQuery实现前端分页功能
Mar 23 jQuery
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
Nov 27 Javascript
详解Javascript 中的 class、构造函数、工厂函数
Dec 20 Javascript
vue自定义tap指令及tap事件的实现
Sep 18 Javascript
对angular 实时更新模板视图的方法$apply详解
Oct 09 Javascript
使用webpack打包后的vue项目如何正确运行(express)
Oct 26 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
Sep 18 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
获取PHP警告错误信息的解决方法
2013/06/03 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
CodeIgniter基于Email类发邮件的方法
2016/03/29 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
Angularjs上传图片实例详解
2017/08/06 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
Python 多线程抓取图片效率对比
2016/02/27 Python
Python多线程爬虫简单示例
2016/03/04 Python
python创建文件时去掉非法字符的方法
2018/10/31 Python
谈谈python垃圾回收机制
2020/09/27 Python
财务人员求职自荐书范文
2014/02/10 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
Django框架中模型的用法
2022/06/10 Python