为什么隐藏侧边栏的 Greasemonkey JQuery 脚本在 Stack Exchange 网站上有效,但在 Stack Overflow 上无效?

Why does my Greasemonkey JQuery script that hides the sidebar work on Stack Exchange sites but not Stack Overflow?

我被侧边栏的相关问题和网络热点问题分散了注意力,所以我写了一个Greasemonkey脚本来隐藏它们。该脚本适用于 Stack Exchange 站点,但不适用于 Stack Overflow 本身。

// ==UserScript==
// @name        minimal-stack-exchange
// @include     http://www.whosebug.com/*
// @include     http://www.stackexchange.com/*
// @include     http://*.stackexchange.com/*
// @include     http://*.whosebug.com/*
// @description Hide distracting links from StackExchange pages
// @require     http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant       GM_addStyle
// ==/UserScript==

$("#sidebar").hide();
$("#herobox").hide();
$("#footer").hide();

我已经清除了我的 Firefox 缓存,使用 Inspect Element 来确定我使用了正确的 div ID,但没有成功。

解决方案是 http://whosebug.com 未被通配符 http://*.whosebug.com/* 捕获,因此添加另一个包含行解决了该问题。

// ==UserScript==
// @name        minimal-stack-exchange
// @include     http://www.whosebug.com/*
// @include     http://www.stackexchange.com/*
// @include     http://*.stackexchange.com/*
// @include     http://*.whosebug.com/*
// @include     http://stackexchange.com/*
// @include     http://whosebug.com/*
// @description Hide distracting links from StackExchange pages
// @require     http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant       GM_addStyle
// ==/UserScript==


$("#sidebar").hide();
$("#herobox").hide();
$("#footer").hide();

在这种情况下,更好的解决方案是使用@matchDoc而不是@include@match 智能处理前导 *. 并提供更好的性能和安全性,尤其是在 Chrome.

以下 @match 指令完成:

  1. 匹配所有 Stack Exchange 站点。 (问题@includes 遗漏了一些重要的问题。)
  2. 同时匹配 http://https://,因为所有 Stack Exchange 站点都支持 SSL。
// @match       *://*.askubuntu.com/*
// @match       *://*.mathoverflow.net/*
// @match       *://*.serverfault.com/*
// @match       *://*.stackapps.com/*
// @match       *://*.stackexchange.com/*
// @match       *://*.whosebug.com/*
// @match       *://*.superuser.com/*

注意:对于实际脚本,我建议您也排除某些 Stack Exchange 页面,除非您明确为它们编码。

请参阅 Stack Apps 上的 "Complete list of sites to @include / @match into my script?"