一个轻量级的 ScriptCat 用户脚本,用于修改 Google 搜索结果的打开行为,让点击搜索结果时在新标签页中打开,而不离开当前搜索页面。
MutationObserver 监听页面 DOM 变化,处理动态加载的搜索结果。| 项目 | 支持情况 |
|---|---|
| 用户脚本管理器 | ScriptCat |
| 搜索引擎 | |
| 脚本语言 | JavaScript |
| 浏览器 | 支持 ScriptCat 的浏览器 |
| 依赖 | 无 |
| 网络请求 | 无 |
脚本默认匹配以下 Google 域名:
google.comgoogle.com.hkgoogle.co.jpgoogle.co.uk如果使用其他 Google 地区域名,需要根据实际情况修改脚本匹配规则。
首先,在浏览器中安装 ScriptCat 用户脚本管理器。
官方网站:ScriptCat
打开 Google,搜索任意关键词。
点击一个普通网页搜索结果,检查浏览器是否在新标签页中打开目标网页,同时保留原来的搜索页面。
本脚本主要通过以下三个步骤实现功能。
通过 CSS 选择器查找 Google 搜索结果中的普通网页链接:
const links = document.querySelectorAll(
'div#search a:has(h3)'
);
其中:
div#search:Google 搜索结果的主要容器。a:搜索结果中的超链接。:has(h3):筛选包含标题元素的链接,以减少对其他链接的干扰。为符合条件的链接设置新标签页打开行为:
link.setAttribute('target', '_blank');
link.setAttribute('rel', 'noopener noreferrer');
其中:
target="_blank":请求浏览器在新的浏览上下文中打开链接,通常表现为新标签页。rel="noopener noreferrer":避免新页面通过 window.opener 访问原页面,同时不向目标网站传递来源信息。Google 搜索页面可能在初始加载之后继续插入新的搜索结果,因此仅在页面加载时修改链接可能不够。
脚本使用 MutationObserver 监听 DOM 变化:
const observer = new MutationObserver(setTargetBlank);
observer.observe(document.body, {
childList: true,
subtree: true
});
当页面内容发生变化时,重新执行搜索结果链接处理逻辑。
脚本通过元数据中的 @match 指定生效的网站。
例如:
// @match https://www.google.com/search*
// @match https://www.google.com.hk/search*
// @match https://www.google.co.jp/search*
// @match https://www.google.co.uk/search*
如果你使用其他 Google 域名,可以添加对应的匹配规则。
当前脚本使用:
'div#search a:has(h3)'
如果 Google 调整了页面结构,导致脚本无法正确识别搜索结果,可以使用浏览器开发者工具检查实际的 DOM 结构,并调整选择器。
请注意,:has() 是现代浏览器支持的 CSS 选择器,但非常旧的浏览器可能无法使用。
可以按以下顺序检查:
@match 规则。target="_blank"。此外,网页的 JavaScript 事件处理逻辑可能覆盖或绕过普通链接的默认行为。因此,修改 target 属性并不能保证所有类型的链接都一定在新标签页打开。
当前脚本主要针对包含 h3 标题的普通网页搜索结果。
图片、视频、新闻、地图、广告以及其他特殊结果可能使用不同的 DOM 结构或交互方式,不在当前脚本的主要支持范围内。
target="_blank" 只要求浏览器使用新的浏览上下文打开页面,并不强制要求使用标签页还是独立窗口。
实际行为取决于浏览器设置和用户的浏览环境。
脚本仅修改匹配到的搜索结果链接属性,不会主动修改搜索关键词、搜索请求或 Google 账户设置。
不过,脚本依赖 Google 页面结构,因此未来页面更新可能影响其正常工作。
本项目遵循最小权限原则:
GM_xmlhttpRequest 等网络请求接口。脚本使用 noopener noreferrer 降低新页面访问原始页面的风险。
本项目采用 MIT License 开源。
你可以自由使用、修改、分发本项目,但需要保留原始版权声明和许可证文本。
欢迎提交 Issue 或 Pull Request。
如果发现脚本无法适配新的 Google 搜索页面结构,可以提供:
这些信息有助于定位和修复兼容性问题。
项目目标: 让 Google 搜索拥有更符合个人浏览习惯的新标签页打开体验,同时保持脚本轻量、简单和易于维护。