自定义浏览器体验:用户脚本与样式

在互联网的世界里,JavaScript 和 CSS 不仅仅是后端技术。可以通过编写自己的脚本和样式表,让网页浏览器应用它们,从而实现对任何网站的个性化定制。本文将带了解这种神秘的 JavaScript 和 CSS 形式,并探讨为什么它拥有成千上万的忠实粉丝,即使他们中许多人甚至没有写过一行 JavaScript 或 CSS 代码,但他们坚信自己的浏览方式是超群的。

是否曾经希望某些网站不要使用那些糟糕的颜色选择、对比度或字体大小?是否希望其他网站不要对耐心提出无法忍受的要求,或者试图让感到不安?用户脚本和用户样式可以帮助。它们可以让顽固的网站变得听话,让好的网站变得更好。最终,将掌控一切。

用户脚本与用户样式

用户脚本和用户样式是由终端用户(这些使用浏览器的人)编写的,目的是自定义访问的网站的功能或外观和感觉。这与普遍的看法相反,即 CSS 和 JavaScript 文件是由网页设计师编写的,并且只能作为它们起源的网站的一部分。

虽然看起来需要 CSS 和 JavaScript 的知识,但大多数粉丝只是访问像 OpenUserJS.org 或 UserStyles.org 这样的网站来获取他们想要的东西。就像书签一样,成千上万的用户 JS 和用户 CSS 几乎用于所有可以想象的目的。本文作者几乎编写了他所有的用户脚本/样式。如果是一个网页开发者,可能也想这样做。

在 Firefox/Seamonkey/Iceape 浏览器中,可以使用 Greasemonkey 插件来管理和执行用户脚本,使用 Stylish 插件来管理和应用用户样式。这两个插件都提供了一个文本编辑器来编写 JS/CSS。插件还允许将 CSS/JS 应用到特定网站(使用 URL 中的通配符)或所有网站。

旧版 Opera(12.x 及更早版本)浏览器总是内置支持用户脚本和样式。它不得不这样做,因为它通常因为一些无知的网页程序员依赖浏览器检测(这有利于 Internet Explorer)而不是功能检测而被排除在流行网站之外。Opera 现在已经成为 Chrome 的克隆,基于 Presto 引擎的 Opera 12.x 已经过时。

用户脚本示例

以著名的 Gmail 登录页面为例。曾经有一段时间,网络邮件提供商会默认不勾选 "保持登录状态"。现在,默认情况下已经勾选了(不仅仅是 Google,其他提供商也是如此)。每次登录时都要取消勾选这个选项是一个容易忘记的额外步骤。

如何让它自动取消勾选?这个 Greasemonkey 脚本可以为做到这一点。

// ==UserScript== // @name Uncheck Google Signed-In Checkbox // @description Automatically unchecks the "Stay signed-in" check box // @include https://accounts.google.com/* // @version 1 // @grant none // ==/UserScript== document.addEventListener("DOMContentLoaded", uncheckGoogleStaySignedInButton, false); function uncheckGoogleStaySignedInButton() { try { document.getElementById("PersistentCookie").checked = false; } catch (err) { console.error("UGSIC Greasemonkey Error: " + err); } }

Greasemonkey 插件在所有匹配 @include 过滤器的页面上执行此脚本。脚本找到复选框并取消勾选它。(稍作修改,也可以让同一个脚本在 Yahoo Mail 登录页面上工作。)

在编写脚本之前,需要找到复选框的 HTML 元素 ID。任何值得称道的网页开发者都知道,这可以通过在网页上右键单击复选框并选择 "检查元素" 来完成。

是否觉得 Yahoo Mail 页面在滚动前要求提供电话号码很烦人?那么,这个用户脚本将自动帮助跳过这一页。

// ==UserScript== // @name Bypass Phone Number Prompt on Yahoo Mail // @description Get past the page that asks for your phone number // @include https://edit.yahoo.com/progreg/* // @exclude %exclude% // @version 1 // @grant none // ==/UserScript== document.addEventListener("DOMContentLoaded", getPastPhoneNumberPage, false); function getPastPhoneNumberPage() { try { window.alert("Moving past the page"); location.href = "https://mail.yahoo.com"; } catch (err) { console.log("BPNPYM Greasemonkey Error: " + err); } }

如果曾经拒绝提供号码,那么网站应该尊重并记住决定。通过每次登录时都装傻,它试图强迫交出号码。

用户样式示例

以 DuckDuckGo 页面为例。将这个搜索引擎设置为默认,因为它更尊重用户。然而,发现它的网页颜色和对比度并不符合喜好。所以为它编写了一个用户 CSS,并记得在样式后加上 "!important" 属性以覆盖页面作者的设置。

对于 Wikipedia 网站,使用这个 CSS,因为页面通常文字密集,并且占据了整个屏幕的宽度。在大屏幕上,它们真的可以让人脖子疼。

* { font-family: Century Schoolbook L!important; } div#content { font-size: 1.2em; width: 7in; }

移动设备上的用户 JS/CSS

作为一名用户脚本和样式的粉丝,在 Android 浏览器中添加了运行它们的能力。虽然用户样式可以像通常一样编写,但用户脚本必须以书签格式编写 - 前缀为 "javascript:"。例如,要编辑一个网页,使用这个脚本。

javascript:(function() { document.body.contentEditable = true; document.designMode = 'on'; })();

这个脚本甚至可以在桌面浏览器中工作,如 Internet Explorer 或 Firefox,但可能不适用于 Chrome。不妨试试。

维护

当然,网页会发生变化,ID(或者试图干预的任何东西)也会随之变化。 Greasemonkey 脚本最终可能会停止工作。将不得不自己修复它,或者从网络上更新它,或者找到一个新的。

去年,发布了一个 Greasemonkey 脚本,它会遍历 Facebook 个人资料的活动日志中的所有帖子,并逐个删除它们 - 这种方式比要求 Facebook 一次性删除它们更有趣。这是由于一个旧的 Greasemonkey 脚本引用了一个同样旧的文章[2]已经过时。在另一个案例中,编写的一个 Greasemonkey 脚本在发布后一个月内就停止了工作,用于下载 YouTube 视频作为 MP4/FLV/WebM 文件。尽管修复了它,但可能不久之后脚本又需要关注了。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485