推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
dyxang

如何用 js 阻止网页中某网址的加载

  •  
  •   dyxang · Apr 21, 2020 via Android · 5740 views
    This topic created in 2398 days ago, the information mentioned may be changed or developed.
    自己博客插入一段开源项目的 js,每次访问页面的时候都会请求 hm.baidu.com ,估计是开发者统计数据,但是我又不想让它访问。如何做到阻止?
    Supplement 1  ·  Apr 21, 2020
    算了……就让他统计吧……反正个人博客没什么值得统计的……
    Supplement 2  ·  Apr 21, 2020
    放上来吧:
    涉及到的项目

    Valine“一款快速、简洁且高效的无后端评论系统” valine.js.org
    开发者在目前最新版本 1.4.4 中加入了统计代码(控制台亲测),我已用回旧版本 1.3.1
    33 replies  •  2020-04-23 10:17:35 +08:00
    Jackwolf
    Jackwolf
    Apr 21, 2020 via iPhone
    1
    先确认是否是自己浏览器的锅

    换台电脑的试试看
    dyxang
    dyxang
    OP
    Apr 21, 2020 via Android
    2
    @Jackwolf 我是安装了 ublock 才看到 hm.baidu.com block by cilent
    dyxang
    dyxang
    OP
    Apr 21, 2020 via Android
    3
    @Jackwolf 控制台看到的,但我又不想让自己网页挂上了别人的统计…
    dyxang
    dyxang
    OP
    Apr 21, 2020 via Android
    4
    @Jackwolf 啊发快了,控制台看到发起程序链就是由这个开源项目的 js 发起的
    Elissa
    Elissa
    Apr 21, 2020
    5
    检查博客的插件、主题、模板是否含有统计链接
    dyxang
    dyxang
    OP
    Apr 21, 2020 via Android
    6
    @Elissa 静态的,貌似是这个项目的开发者在 js 藏了一段请求
    foru17
    foru17
    Apr 21, 2020
    7
    adguard home 或者 pihole
    serenader
    serenader
    Apr 21, 2020❤️2
    8
    配置 CSP 头,浏览器就能帮你拦截掉。
    iNaru
    iNaru
    Apr 21, 2020❤️1
    9
    如果这个统计请求是通过 document.createElement 的方式加载的话,
    即:
    ae01.alicdn.com/kf/U2a301ed880ae4b0c9deb1b8a7d85ea34z.jpg

    可以用以下这样阻止加载(抄袭自 uBO github.com/gorhill/uBlock/blob/a94df7f3b27080ae2dcb3b914ace39c0c294d2f6/assets/resources/scriptlets.js#L35 )。
    该代码必须在统计代码前运行。

    paste.ubuntu.com/p/HQFkzzrq3Q/
    dyxang
    dyxang
    OP
    Apr 21, 2020 via Android
    10
    @foru17
    我的意思是不要访问页面的人被统计代码给统计到,而不是不要我访问页面被统计到,页面(博客)是我的😂
    @serenader
    ysc3839
    ysc3839
    Apr 21, 2020
    11
    既然是开源项目,自己去掉这段统计就好了吧?
    另外说说是什么项目?
    eason1874
    eason1874
    Apr 21, 2020❤️1
    12
    我想到的几个方法。

    一是直接找到开源 JS 里的统计代码删掉,或者把 ID 改成你自己的 ID 。

    二是跟 #8 说的一样,通过 Content-Security-Policy 限制资源域名,不让加载百度统计域名的资源,这样就统计不了了,但是这样你自己也用不了百度统计了,而且这个对浏览器版本有一定要求,老的不支持。

    三是提前把百度统计使用的设置变量 _hmt 设置成你自己的参数,并且通过 Object.freeze 锁定,不让修改,这样统计就统计到你自己的账号了。我感觉可行,不过我没试过。
    dyxang
    dyxang
    OP
    Apr 21, 2020 via Android
    13
    @ysc3839 就是去不掉才没辙问 V2EX 啊
    valine,评论系统,目前最新 1.4.4
    autoxbc
    autoxbc
    Apr 21, 2020❤️2
    14
    CSP 可以做到,或者给全局对象 XMLHttpRequest 和 fetch 套一层判断函数
    dyxang
    dyxang
    OP
    Apr 21, 2020 via Android
    15
    @autoxbc 静态博客……
    dyxang
    dyxang
    OP
    Apr 21, 2020 via Android
    16
    @autoxbc 啊不好意思,犯了望文生义的错了,以为是动态博客和服务器才能做的
    ysc3839
    ysc3839
    Apr 21, 2020
    17
    @dyxang 搜索 hm.baidu.com 能找到相关代码,删除即可。
    zhw2590582
    zhw2590582
    Apr 21, 2020❤️1
    19
    统计原理是发起有个 img 的 http 请求,语法是 var img = new Image; img.src='baidu.com';
    那样的话,我可以在这个脚本加载前,重定义构造函数 Image,当实例的 src 等于 baidu.com 就直接返回就可以了。
    kingcc
    kingcc
    Apr 21, 2020 via Android
    20
    service worker
    foxt8
    foxt8
    Apr 21, 2020
    21
    同用 Vline,没有遇到这个问题?
    Latin
    Latin
    Apr 21, 2020
    22
    hosts
    0.0.0.0 hm.baidu.com
    openmynet
    openmynet
    Apr 21, 2020❤️1
    23
    代码在这:
    var descriptor = Object.getOwnPropertyDescriptor(
    HTMLScriptElement.prototype,
    "src"
    );
    Object.defineProperty(HTMLScriptElement.prototype, "source", descriptor);

    Object.defineProperty(HTMLScriptElement.prototype, "src", {
    get: function() {
    return this.source;
    },
    set: function(v) {
    if (/baidu.com/.test(v)) {
    throw("block")
    }
    this.source = v;
    }
    });

    #可以拓展为反网页劫持
    openmynet
    openmynet
    Apr 21, 2020
    24
    HTMLScriptElement 可以换为 HTMLIFrameElement,HTMLImageElement 以拦截 iframe 与 image 方式的统计功能
    serenader
    serenader
    Apr 21, 2020 via iPhone❤️1
    25
    CSP 就是用来帮你拦截不想要的请求的,不管是你自己还是你博客的访客。

    就算是纯静态博客也能配置 CSP,CSP 除了可以通过配置响应头来实现之外,也能使用 meta 标签来声明。

    楼上说的其他方法太 tricky 了,我不觉得是个好办法。
    dyxang
    dyxang
    OP
    Apr 21, 2020 via Android
    26
    @ysc3839 #17
    这个是外部引用,自己改不了
    @Latin #22
    都说了是自己博客上面,不想让自己博客被别人统计……不是电脑屏蔽……
    @openmynet #23
    这段放在代码前还是代码后
    ysc3839
    ysc3839
    Apr 21, 2020 via Android
    27
    @dyxang 改了重新传到自己网站不就好了?
    dyxang
    dyxang
    OP
    Apr 21, 2020 via Android
    28
    @ysc3839
    最新的你用过吗?
    我以前试过,不能。
    ysc3839
    ysc3839
    Apr 21, 2020 via Android
    29
    @dyxang 我没有相关环境,无法测试。
    你说的不能是怎么个不能?
    dyxang
    dyxang
    OP
    Apr 21, 2020 via Android
    30
    @ysc3839 改了保存到自定义网址引用后无法使用
    ysc3839
    ysc3839
    Apr 21, 2020 via Android
    31
    @dyxang 怎么个无法使用呢?遇到了什么错误吗?就不能一次性把问题说清楚吗?
    dyxang
    dyxang
    OP
    Apr 22, 2020 via Android
    32
    @ysc3839 我现在也没有电脑,无法操作具现,很久之前试过的,貌似有验证,改了地址或者去掉了评论框的官网链接就无法使用。
    openmynet
    openmynet
    Apr 23, 2020
    33
    @dyxang 放在前面
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1977 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 12:18 · PVG 20:18 · LAX 04:18 · JFK 07:18
    ♥ Do have faith in what you're doing.