我注意到某些网站(例如 Stack Exchange 网站、戴尔等)会自动添加到我的 Google Chrome 搜索引擎列表中。
他们甚至在输入中添加了键盘快捷键。以下是一些示例:
- 戴尔:键盘 -> Dell.com
- Stack Exchange 网站管理员:键盘 -> webmasters.stackexchange.com
- 路透社:键盘 -> reuters.com
问题 1:这是 Chrome 中的默认行为吗?(让网站将自己添加到搜索引擎列表中?)
问题2:是否可以在 Chrome 中禁用此行为?
注意:我在 Windows 7 64 上运行最新版本的 Chrome:11.0.696.57,并且只安装了一个扩展程序:Google URL 缩短器。
答案1
答案2
这让我非常抓狂,所以我找到了一个虽然有点黑客但是却有效的解决方案。
Chrome 将其搜索引擎存储在一个简单的 sqlite3 数据库中。我发现,当 Chrome 去添加搜索引擎时,您可以创建一个触发器,从而导致数据库插入语句被忽略。
请注意,搜索引擎仍保留在内存中,因此它们仍会显示在列表中,直到浏览器重新启动。但是您不必总是清除它们,因此如果您想添加自己的搜索引擎,您不必担心意外删除它们(是的,手动添加搜索引擎仍然有效)。
首先您必须找到该Web data
文件。
Mac OS X:
~/Library/Application Support/Google/Chrome/Default/Web Data
经验值:
C:\Documents and Settings\<username>\Local Settings\Application Data\Google\Chrome\User Data\Default\Web Data
Vista/7:
C:\Users\<username>\AppData\Local\Google\Chrome\User Data\Default\Web Data
Linux:
~/.config/google-chrome/Default/Web Data
或~/.config/chromium/Default/Web Data
然后用 sqlite3 编辑器打开它。
此时必须关闭 Chrome。
官方的 SQLite 网站有一个下载页面带有针对各种操作系统的预编译命令行实用程序。不过,任何能够处理 sqlite3 数据库的编辑器都可以使用。
对于命令行实用程序,使用如下命令(不要忘记转义或引用文件名中的空格):
sqlite3 /path/to/Web\ Data
添加触发器。
在插入关键字之前创建触发器no_auto_keywords 当(NEW.originating_url 非空且 NEW.originating_url != '')开始选择 RAISE(IGNORE);结束;
大功告成。关闭编辑器并重新启动 chrome。
其工作方式是,当 chrome 准备将搜索引擎自动添加到表中时keywords
,chrome 会将originating_url
字段设置为其来源网站。触发器基本上会查找任何具有非空originating_url
字段的插入,并发出一个RAISE(IGNORE)
,这会导致语句被默默跳过。
手动添加的搜索引擎没有originating_url
,因此触发器允许添加它们。
答案3
有两种方法可以做到这一点:
将此用户脚本添加到篡改猴子:
var elOpenSearch = document.querySelector('[type="application/opensearchdescription+xml"]'); if (elOpenSearch) elOpenSearch.remove();
如果您不是 Tamper Monkey 的常规用户,并且不想为此目的而浪费 15-20 MB 的 RAM 来加载 Tamper Monkey 扩展,那么您可以自行开发不消耗任何内存的超轻量级扩展。说明如下。
如何创建自己的扩展程序以删除 OpenSearch<link>
标签并阻止 Chrome 自动添加搜索引擎:
创建一个文件夹来存放扩展文件。
在此文件夹中,创建两个名为
manifest.json
和的文本文件,content.js
包含下面提供的代码。清单.json
{ "manifest_version": 2, "name": "Disable OpenSearch", "version": "1.0.0", "description": "Remove the OpenSearch <link> tag to prevent Google Chrome from auto-adding custom search engines.", "content_scripts": [ { "matches": ["<all_urls>"], "js": ["content.js"] } ], "permissions": [ "http://*/*", "https://*/*" ] }
内容.js
var elOpenSearch = document.querySelector('[type="application/opensearchdescription+xml"]'); if (elOpenSearch) elOpenSearch.remove();
在 Chrome 中,转到
chrome://extensions/
(在 URL 栏中输入此地址)。启用开发者模式。
点击“加载解压的扩展”,选择您在步骤1中创建的文件夹,然后单击“确定”。
恭喜!现在使用 Google Chrome 应该不会那么麻烦了 :-)。
局限性:此解决方案并非 100% 可靠。如果您访问包含搜索参数的 URL(例如,https://cdnjs.com/#q=fastclick),那么在极少数情况下,仍会添加自定义搜索引擎。我怀疑这是因为 Chrome 可以<link>
在用户脚本或扩展程序有机会将其从 DOM 中删除之前解析 OpenSearch 标签。
答案4
这里有一个有点 hack 的解决方法,对我来说很好用。只需将搜索别名重命名为一些神秘的名称,例如“§$%!/()&/”。只要搜索引擎还在那里,你就再也看不到它了。如果你不能在 Google 上搜索“jenkins”,那就太烦人了,因为 Chrome 会强制你在 jenkins 中搜索。