爱意满满的作品展示区。
9ki

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

  •  
  •   9ki · Mar 22, 2020 · 3849 views
    This topic created in 2246 days ago, the information mentioned may be changed or developed.
    有需要的自行复制到油猴子里面,头像链接是随便从某个用户那里复制的。

    效果: 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")
    })();
    ```
    7 replies    2020-03-23 20:33:51 +08:00
    mara1
        1
    mara1  
       Mar 22, 2020
    为什么写成闭包的形式,定义个函数,然后执行这个函数可以吗
    chuxiaonan
        2
    chuxiaonan  
       Mar 22, 2020
    @mara1
    我差点儿以为我对闭包的认知发生了偏差
    于是又去查了一下 MDN
    哥们 这是 IIFE 不是闭包...
    autoxbc
        3
    autoxbc  
       Mar 23, 2020
    CSS 会更高效一些

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

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

    所以,除了 Top-level await,不要对代码做任何包裹
    mchl
        6
    mchl  
       Mar 23, 2020
    @autoxbc 新建脚本官方模板就是立即函数
    mara1
        7
    mara1  
       Mar 23, 2020
    @chuxiaonan ,你说得对,这个不是闭包,我记混了。以前见过闭包往里边传参数的,function(){...}(i);跟这个有点像。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3932 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 00:10 · PVG 08:10 · LAX 17:10 · JFK 20:10
    ♥ Do have faith in what you're doing.