Anti Snoop

Conceal information about network type (e.g. cellular/broadband), number of CPU cores (or Hyper Threads), and video adapter brand & model.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        Anti Snoop
// @namespace   https://greasyfork.org/en/users/85671-jcunews
// @version     1.0.6
// @license     AGPLv3
// @author      jcunews
// @description Conceal information about network type (e.g. cellular/broadband), number of CPU cores (or Hyper Threads), and video adapter brand & model.
// @match       *://*/*
// @inject-into page
// @grant       none
// @run-at      document-start
// ==/UserScript==

(() => {
  ["connection", "mozConnection", "webkitConnection", "hardwareConcurrency"].forEach((k, p) => {
    if (navigator[k] && (p = Object.getPrototypeOf(navigator, k))) {
      p.get = undefined;
      Object.defineProperty(navigator, k, p)
    }
  });
  [window.WebGL2RenderingContext, window.WebGLRenderingContext].forEach(fn => {
    if (fn && !fn.prototype.getParameter_) {
      fn.prototype.getParameter_ = fn.prototype.getParameter;
      fn.prototype.getParameter = function(n) {
        if ([37445, 37446].includes(n)) return "";
        return fn.prototype.getParameter_.apply(this, arguments)
      }
    }
  })
})();