写了一个将所有 V2EX 用户头像设置为默认像素风头像的脚本

2020-03-22 21:29:19 +08:00
 9ki
有需要的自行复制到油猴子里面,头像链接是随便从某个用户那里复制的。

效果: https://imgchr.com/i/8IoHET


```javascript
// ==UserScript==
// @name 移除个性化头像
// @namespace http://tampermonkey.net/
// @version 0.1
// @author author
// @match https://www.v2ex.com/*
// ==/UserScript==

(function () {
'use strict';
const avatars = document.querySelectorAll("#Main .avatar")
avatars.forEach(node => node.src = "https://cdn.v2ex.com/gravatar/81a2b3e19d8ca2ab40d3d87c6911a207?s=48&d=retro")
})();
```
3224 次点击
所在节点    分享创造
7 条回复
mara1
2020-03-22 22:49:34 +08:00
为什么写成闭包的形式,定义个函数,然后执行这个函数可以吗
chuxiaonan
2020-03-22 23:06:20 +08:00
@mara1
我差点儿以为我对闭包的认知发生了偏差
于是又去查了一下 MDN
哥们 这是 IIFE 不是闭包...
autoxbc
2020-03-23 00:14:15 +08:00
CSS 会更高效一些

#Main img.avatar {
height: 48px;
width: 48px;
box-sizing: border-box;
padding-left: 48px;
background-image: url("https://cdn.v2ex.com/gravatar/........");
}
9ki
2020-03-23 00:20:56 +08:00
@autoxbc good,本来是打算顺便写一个头像的随机生成算法的
autoxbc
2020-03-23 00:31:23 +08:00
@mara1 #1 有个普遍的误解是油猴内定义的变量可能污染全局变量,所以需要用立即执行函数包裹起来以便控制作用域

事实是 Tampermonkey 有非常严格的沙盒策略,任何局部变量,全局变量,全局窗口的一级属性都无法穿透沙盒,唯二的方法是:
1. 写入全局窗口的二级属性
window.location.prop = 42 ;
2. 显式 grant unsafeWindow

所以,除了 Top-level await,不要对代码做任何包裹
mchl
2020-03-23 10:15:40 +08:00
@autoxbc 新建脚本官方模板就是立即函数
mara1
2020-03-23 20:33:51 +08:00
@chuxiaonan ,你说得对,这个不是闭包,我记混了。以前见过闭包往里边传参数的,function(){...}(i);跟这个有点像。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/655179

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX