Google Chrome 会自动将网站添加到我的搜索引擎列表中吗?

Ame*_*ina 140 google-chrome search-engines

我注意到某些网站(例如 Stack Exchange 网站、Dell 等)会自动添加到我在 Google Chrome 中的搜索引擎列表中。

他们甚至为他们的条目添加了一个键盘快捷键。这里有些例子:

  • 戴尔:键盘 -> Dell.com
  • Stack Exchange 网站管理员:键盘 -> webmasters.stackexchange.com
  • 路透社:键盘 -> reuters.com

问题 1:这是 Chrome 中的默认行为吗?(让网站将自己添加到搜索引擎列表中?)

Q2:是否可以在 Chrome 中禁用此行为?

注意:我在 Windows 7 64 上运行最新版本的 Chrome:11.0.696.57,并且我只安装了一个扩展程序:Google URL Shorter。

phe*_*mer 68

这让我完全疯了,所以我找到了一个骇人听闻但有效的解决方案。

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

  • 远景/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
Run Code Online (Sandbox Code Playgroud)

添加触发器。

CREATE TRIGGER no_auto_keywords BEFORE INSERT ON Keywords WHEN (NEW.originating_url IS NOT NULL AND NEW.originating_url != '') BEGIN SELECT RAISE(IGNORE); 结尾;

你完成了。关闭编辑器并启动 chrome 备份。


它的工作方式是,当 chrome 向表中添加自动添加搜索引擎时keywords,chrome 将该originating_url字段设置为它来自的网站。触发器基本上查找具有非空originating_url字段的任何插入,并发出RAISE(IGNORE)导致该语句被静默跳过的 a 。
手动添加的搜索引擎没有originating_url,因此触发器允许添加它们。

  • 在尝试了几个编辑器之后,[SQLiteStudio](http://sqlitestudio.pl/?act=download) 我最喜欢的。我与这个产品没有任何关系。经过一番搜索,我发现了一个有用的工具。 (2认同)

Gre*_*sky 44

感谢@10basetom 的代码并受到@shthed 的启发,我发布了不添加自定义搜索引擎Chrome 扩展程序,它就是这样做的。

您可以在此处找到源代码。

让我知道你的想法!

  • 实际上不再起作用:许多自定义搜索引擎最终仍会被添加。 (5认同)
  • 请注意,由于许多贡献者的努力,扩展程序刚刚更新了一个大大改进的检测/阻止算法!如果之前对您来说效果不佳,请放弃它。干杯 (3认同)

thd*_*oan 37

有两种方法可以做到这一点:

  1. 将此用户脚本添加到Tamper Monkey

    var elOpenSearch = document.querySelector('[type="application/opensearchdescription+xml"]');
    if (elOpenSearch) elOpenSearch.remove();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果您不是普通的 Tamper Monkey 用户,并且不想为了加载 Tamper Monkey 扩展而浪费 15-20 MB 的 RAM,那么您可以推出自己的超轻量级扩展,它不会消耗任何内存. 下面提供了说明。

如何创建自己的扩展程序以删除 OpenSearch<link>标签并阻止 Chrome 自动添加搜索引擎:

  1. 创建一个文件夹,您将在其中放置扩展文件。

  2. 在此文件夹中,创建两个名为manifest.jsoncontent.js包含下面提供的代码的文本文件。

    清单文件

    {
      "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://*/*"
      ]
    }
    
    Run Code Online (Sandbox Code Playgroud)

    内容.js

    var elOpenSearch = document.querySelector('[type="application/opensearchdescription+xml"]');
    if (elOpenSearch) elOpenSearch.remove();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在 Chrome 中,转到chrome://extensions/(在 URL 栏中输入)。

  4. 启用开发者模式。

  5. 单击“加载解压后的扩展”,选择您在步骤 1 中创建的文件夹,然后单击“确定”。

恭喜!现在使用谷歌浏览器应该不那么烦人了:-)。

限制:此解决方案并非 100% 可靠。如果您转到包含搜索参数的 URL(例如https://cdnjs.com/#q=fastclick),则在极少数情况下仍会添加自定义搜索引擎。我怀疑这是因为 Chrome 可以<link>在用户脚本或扩展程序有机会将其从 DOM 中删除之前解析 OpenSearch标记。

  • 感谢伟大的代码和@shthed 感谢您的灵感!我刚刚发布了一个 Google Chrome 扩展程序,它就是这样做的。[您可以在此处找到](https://chrome.google.com/webstore/detail/dont-add-custom-search-en/dnodlcoolidkjgbpeoleabmkocdhacc)。源代码 [此处](https://github.com/gregsadetsky/chrome-dont-add-custom-search-engines)。让我知道你的想法!:-) (7认同)
  • 我很惊讶没有人将此作为商店的官方扩展发布,似乎它会很受欢迎。理想情况下,我想要一个扩展程序在添加搜索引擎之前询问我,或者在地址栏中有一个图标让我添加它,就像 RSS 提要一样。 (2认同)

Sat*_*hat 26

  1. 是的,这是设计使然
  2. 没有办法禁用它。

  • 然而,正如其他答案所解释的那样,有一些方法可以禁用它:) (11认同)
  • “是的,这是故意的。” 在没有用户输入的情况下自动向系统添加内容是一种糟糕且不恰当的设计。恶意网站很容易利用这一点。“不,没有办法禁用它。” 显然有,当它是软件时,总有办法。懒惰并说没有,这不是解决方案。这个答案应该删除,作者警告。 (7认同)
  • 我喜欢这个答案。这很简单但信息量很大 (2认同)

alc*_*hol 11

编辑:这不再适用于 Chrome 84 及更高版本

要快速删除大量搜索引擎,请浏览至 chrome://settings/searchEngines,按 Ctrl-Shift-J(在 OSX 上为 Opt-Cmd-J)进入 Javascript 控制台,然后粘贴:

settings
    .SearchEnginesBrowserProxyImpl
    .prototype
    .getSearchEnginesList()
    .then(function (val) {
        val.others.sort(function (a, b) { return b.modelIndex - a.modelIndex; });
        val.others.forEach(function (engine) {
            settings
                .SearchEnginesBrowserProxyImpl
                .prototype
                .removeSearchEngine(engine.modelIndex);
        });
    });
Run Code Online (Sandbox Code Playgroud)

您可能需要粘贴并运行几次以清除所有内容。


ata*_*man 10

这是一个有点hacky的解决方法,对我来说很好用。只需将搜索别名重命名为诸如"§$%!/()&/" 之类的神秘名称。虽然搜索引擎仍然存在,但您永远不会再看到它。如果您无法在 google 上搜索“jenkins”,那就很烦人了,因为 chrome 会强制您在 jenkins 中进行搜索。

  • 它对我的 `jenkins`、`jira` 和 `confluence` 这样做 - 这让我非常疯狂,因为我无法从我的地址栏中启动与这三个相关的任何内容的常规搜索。这是迄今为止我见过的最好也是唯一可行的解​​决方法。干杯。 (2认同)

小智 8

尝试使用这个简单的用户脚本:

// ==UserScript==
// @name       Block Opensearch XML specs
// @namespace  *
// @version    0.3
// @description  Block opensearch xml links
// @match      *
// @copyright  2012+, Christian Huang
// ==/UserScript==

var i;
var val;
var len;
var opensearches;

opensearches = document.getElementsByTagName('link');
len = opensearches.length;
for (i = 0; i < len;i++) {
    val = opensearches[i].type;
    if ( val == "application/opensearchdescription+xml") {
        opensearches[i].parentNode.removeChild(opensearches[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在哪里添加这个脚本?或执行它? (2认同)
  • @mateuscb 你可以从[这里](https://greasyfork.org/scripts/960-block-opensearch-xml-specs) 得到它。然后只需将脚本放在 chrome 的扩展设置页面中,chrome://extensions/。 (2认同)

Kro*_*mey 7

如果我理解您正确描述的内容,那么这根本不是网站在做任何事情。相反,Chrome 本身会识别网站上的搜索框,然后自己将这些框添加到多功能栏中的搜索选项列表中。

A1:是的,这是默认行为,但这不是网站添加自己,而是 Chrome 添加网站。

A2:我不相信您可以禁用此行为,但是您可以通过转到工具菜单 -> 选项 -> 管理搜索引擎来删除搜索引擎;它们将出现在“其他搜索引擎”下。您可以指定在删除它时不应重新添加一个,我不确定——我碰巧喜欢这个功能,所以我不会尝试删除它们。

  • 这个答案是不正确的,网站确实有效地将自己添加到 Chrome 中,因为它们使用所谓的 [OpenSearch 描述文档](http://www.opensearch.org/) 使 Chrome 能够将其网站的搜索引擎添加到 Chrome 的搜索列表中您的浏览器可以与之交互的引擎。 (2认同)

小智 7

我为此找到的一种解决方法是养成以空格开始所有搜索的习惯。如果您键入?Splunk median(其中?代表空格字符),Chrome 将在 上执行 Google 搜索Splunk median

  • 以问号 (?) 开始搜索也将使用您的默认搜索引擎。 (2认同)

Roo*_*ook 6

<-- 背景-->

我在这里为您提供了一个替代的、不那么引人注目的想法(至少如果您正在运行广告拦截器,因为我们中的许多人都是为了我们自己的理智/安全)。我喜欢尽可能多地使用现有的扩展/脚本,以避免仅针对一个功能(最坏情况)的整个扩展的膨胀,因此该解决方案在此原则下工作。

Adblock 及其变体/后继者(uBlock 是我选择的武器)能够阻止网页元素,包括<link>用于自动发现 OpenSearch 描述 (OSD) 的元素,包含允许自动发现信息的 XML 文件- 添加搜索引擎并让我们头疼。我说“允许”是因为它几乎不是强制性的,因为据我的研究表明,Firefox 只是读取这些信息,并使其可用于在搜索引擎下拉框下轻松添加,而不是像 Chrome 那样悄悄地自动添加它。

Opensearch 规范中多处描述了该功能的使用:

http://www.opensearch.org/Specifications/OpenSearch/1.1#Autodiscovery_in_RSS.2FAtom (出于我们的目的,忽略本节的具体细节,因为它只是使用中的一个示例)


<-- 解决方案-->

由于它指出 OpenSearch 描述 (OSD) 具有唯一类型,因此我们可以使用以下 AdblockPlus/uBlock 规则将它们过滤掉:

##link[type="application/opensearchdescription+xml"]

我已经对此进行了测试,并且规则在我的测试站点(filehippo.com 等)上显示了正确的匹配,并且搜索引擎不再自动添加,所以我相信这是一个完整的解决方案。


关于我在这背后发现的历史的简要说明:多年来,Chromium 的工程师多次将此标记为“WontFix”(多次请求高级用户禁用选项/标志),指出这被认为是一个利基问题,因为功能“普遍有用”,他们的立场是利基问题应该通过扩展或 3rd 方脚本来解决,而不是由开发人员添加无数标志等来迎合所有的突发奇想,所以基本上我们在这里所做的只是符合他们的喜好,并保持良好和易于管理。

祝你好运!如果其他人尝试此操作,请让我们/我知道它是如何工作的!