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实现回旋滚动效果
Jan 08 Javascript
JavaScript实现的in_array函数
Aug 27 Javascript
jQuery+Ajax实现无刷新分页
Oct 30 Javascript
jquery实现树形菜单完整代码
Dec 29 Javascript
jQuery简单实现仿京东分类导航层效果
Jun 07 Javascript
关于JavaScript数组你所不知道的3件事
Aug 24 Javascript
JS实现的相册图片左右滚动完整实例
Nov 23 Javascript
AngularJS Select(选择框)使用详解
Jan 18 Javascript
关于js中的鼠标事件总结
Jul 11 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
Aug 30 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
Jul 24 Javascript
Openlayers实现点闪烁扩散效果
Sep 24 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 获取客户端的真实ip
2009/11/30 PHP
PHPCMS的使用小结
2010/09/20 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
PHP人民币金额转大写实例代码
2015/10/02 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
2018/05/02 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
html向js方法传递参数具体实现
2013/08/08 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
JavaScript中两个字符串的匹配
2016/06/08 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
jQuery窗口拖动功能的实现代码
2017/02/04 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
react-native android状态栏的实现
2018/06/15 Javascript
react PropTypes校验传递的值操作示例
2020/04/28 Javascript
node.js通过url读取文件
2020/10/16 Javascript
python中字典(Dictionary)用法实例详解
2015/05/30 Python
Python实现的Excel文件读写类
2015/07/30 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
python dict 相同key 合并value的实例
2019/01/21 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
大三在校生电子商务求职信
2013/10/29 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
python编写五子棋游戏
2021/05/25 Python
python用tkinter开发的扫雷游戏
2021/06/01 Python
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python