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


121

我注意到某些网站(例如Stack Exchange网站,Dell等)已自动添加到我在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缩短器。


33
@ Sathya,为什么?我想拥有禁用它的灵活性。如果您的问题是为什么我要禁用这样的功能:编辑搜索引擎的界面不是特别好,并且随着列表的增加,很难确定我手动添加了哪些搜索引擎以及自动添加了哪些搜索引擎。在大列表中也很难找到特定条目。
Amelio Vazquez-Reina

16
@Sathya-许多原因:*便利性:有时您想搜索关于某个站点的信息,而不是在该站点上搜索。*一致性:随机和无声地添加新的“搜索引擎”会导致多功能框出现意外行为。*隐私权:Chrome在决定添加新的“搜索引擎”时不会通知您,并且在您清除浏览历史记录时不会消失。*出于礼貌:我是否应该能够选择是否启用此“功能”,或者(如果失败)我至少不能选择在Chrome决定添加网站时通知您,以便我可以拒绝该决定?
phenry

1
似乎我不值得决定自己的浏览器应注意哪个搜索引擎。
安德斯·林登

Answers:


34

感谢@ 10basetom的代码并受@shthed的启发,我发布了“ 请勿添加自定义搜索引擎” Chrome扩展程序。

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

让我知道你的想法!


1
@ O'Rooney谢谢!我看到有些网站会不时地被扩展而漏掉,但是比一个月几乎必须每周完成一次的“清除”要好得多,一个月内清理掉几个搜索引擎要好得多……干杯!
格雷格·萨德斯基2013年

4
不再实际起作用:仍然最终添加了许多自定义搜索引擎。
onnodb

1
@onnodb感谢您的来信,很遗憾,我没有足够的时间来更新扩展名。
Greg Sadetsky '17

1
@ onnodb,Greg,您(或其他感兴趣的人)请尝试这个叉子吗?签出,然后.../src作为解压缩的扩展名加载。让我知道事情的后续。谢谢!
cxw

3
请注意,由于许多贡献者的不懈努力,该扩展程序刚刚通过改进的检测/阻止算法进行了更新!如果它对您之前的效果不好,请早点给它。欢呼声
Greg Sadetsky,

61

这让我绝对发疯,所以我找到了一个骇人但有效的解决方案。

Chrome将其搜索引擎存储在一个简单的sqlite3数据库中。我发现您可以在chrome添加搜索引擎时创建触发器,该触发器使数据库insert语句被忽略。
请注意,搜索引擎仍保留在内存中,因此它们将仍然显示在列表中,直到重新启动浏览器为止。但是,您不必一直清除它们,因此,如果要添加自己的搜索引擎,则不必担心会意外删除它们(是的,手动添加搜索引擎仍然可以使用)。

首先,您必须找到Web data文件。

  • Mac OS X: ~/Library/Application Support/Google/Chrome/Default/Web Data

  • XP: 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

添加触发器。

在(NEW.originating_url不为空且NEW.originating_url!='')插入关键字之前创建触发器no_auto_keywords开始选择RAISE(IGNORE); 结束;

你完成了。关闭编辑器,然后开始备份chrome。


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


2
在尝试了一些编辑器之后,SQLiteStudio是我的最爱。我与该产品无关。经过一番搜索,我发现了一个有用的工具。
mateuscb 2014年

1
这很棒,而且有效。但是,对我来说,Chrome仍然在数据库中而不是数据库中,而是在另一个文件夹“同步数据备份”中添加了搜索引擎。在Windows / Linux中禁用该文件夹的写权限,它将永久消失。
Martin Hansen 2014年

至少在Chrome v47beta中,这似乎不再起作用。重新启动Chrome后,自动添加的搜索引擎仍在列表中,尽管键入关键字不再触发它。
thdoan 2015年

仅供参考:1 /首先复制此文件,以防万一::2 /在Mac 10.11.4(El Capitan)上,我无法使用sqlitebrowser.app("Error: unable to open database "~/Library/Application Support/Google/Chrome/Default/Web Data": unable to open database file)打开文件/数据库。3 /如果您CREATE TRIGGER在打开Chrome的情况下尝试运行该命令,请先Error: database is locked退出Chrome。4 /关闭Chrome后,打开的数据库成功运行:(/Volumes/Macintosh\ HD/Applications/sqlite3 ./Web\ Data在中Terminal,当位于指定目录中时)HTH
sming 2016年

我尝试从id> 2的关键字中删除;和谷歌只是从服务器同步回来。我想已经安装了数千个搜索引擎已经为时已晚。
齐帆

34

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

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

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

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

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

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

    manifest.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://*/*"
      ]
    }

    content.js

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

  4. 启用开发人员模式。

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

恭喜你!现在,谷歌浏览器应该有点烦人了:-)。

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


2
令我惊讶的是,没有人将其发布为商店的正式扩展,似乎它会很受欢迎。理想情况下,我希望扩展程序在添加搜索引擎之前先询问我,或者在地址栏中显示一个图标让我添加它,就像RSS feeds一样。
ryanmonk's

7
感谢出色的代码,@ shthed感谢您的灵感!我刚刚发布了一个Google Chrome扩展程序。你可以在这里找到它。源代码在这里。让我知道你的想法!:-)
Greg Sadetsky '16

@GregSadetsky发布此作为答案,我们可以投票给它:)
O'Rooney '16

24

2
我喜欢这个答案。这很简单,但内容丰富
nXqd 2012年

8
然而,还有其他方法可以禁用它,正如其他答案所解释的一样:)
Enrico

6
“是的,这是设计使然。” 在没有用户输入问题的情况下,自动将内容添加到系统中的设计很糟糕且不合适。恶意网站很容易利用这一点。“不,没有办法禁用它。” 显然,当它是软件时,总有一种方法。懒惰并说没有,这不是解决方案。应删除此答案,并警告作者。
亚历克斯·萨默斯

清除缓存后,我的自定义搜索引擎丢失了。我已经打开了一些站点几个小时,但这些引擎并没有返回。您知道如何找回它们吗?(我不想手动添加它们,太多了)
Mithril

这个错误的答案被推崇。不应该删除它,或者不对其进行编辑以更正它吗?
Santropedro

10

在这里有点hacky解决方法对我来说很好。只需将搜索别名重命名为诸如“§$%!/()&/”之类的神秘名称即可。当搜索引擎仍然存在时,您将再也看不到它。如果您无法在Google上搜索“詹金斯”,那会很烦人,因为Chrome会迫使您搜索詹金斯。


说真的-疯狂烦人。谢谢你的提示。
TJ Biddle

2
它这样做是为了我jenkinsjiraconfluence-它使我绝对是疯了,我不能启动从与这三个东西我的地址栏通用搜索。到目前为止,这是我所见过的最佳且唯一可行的解​​决方法。干杯。
马特·克拉克

1
@MattClark jira恰好!我想搜索有关吉拉的信息,而不是其中!
ErikE 2015年

您的情况如何?对我来说,触发搜索的网站,我必须输入了关键字到omn​​ibar一个Tab键。然后它变成了现场搜索,我可以继续输入搜索字符串。如果只想搜索关键字或包含该关键字的字符串,请输入关键字Space,其余的搜索字符串并按Enter,然后使用默认搜索引擎进行搜索。因此,它不会互相干扰。只需在关键字后使用空格即可使用默认搜索引擎进行搜索,并使用制表符进行站点搜索。
戴维德·费伦茨·罗戈赞

@DawidFerenczy:这对我们其他人不是这样。某个空间仍在使用该搜索引擎。我输入git,然后输入空格,它立即更改为使用git的搜索引擎(已删除了无数次)。
杰拉特(Gerrat)'17

9

尝试使用以下简单的用户脚本:

// ==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]);
    }
}

1
在哪里添加此脚本?或执行它?
mateuscb 2014年

2
@mateuscb您可以从这里获取它。然后,将脚本放到chrome:chrome:// extensions /的扩展程序设置页面中。
维克多·哈格夫斯特(VictorHäggqvist),2014年

这个。是的。太棒了 我需要创建一个虚拟manifest.json(按照这个苏答案,并通过开发模式(安装它作为一个正在开发的扩展),但除此之外,它像一种享受。
旺布尔

1
或者,您可以在Tamper Monkey中使用它。如果您习惯对网站进行修改,TM应该是必不可少的插件。
JasonXA 2014年

您也可以使用此一线:(document.querySelector('[type="application/opensearchdescription+xml"]').remove();请参阅下面的答案)。
thdoan 2015年

9

要快速删除大量搜索引擎,请浏览至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);
        });
    });

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


我不得不将其复制/粘贴大约10次到dev-console中,以删除我拥有的100多个条目。希望我知道如何将其变成单击书签。
jiggunjer

1
我对其进行了修改,使其首先对列表进行反向排序(基于modelIndex),因为从上到下工作时,每次删除条目时,其值都会重置(因此,通常您最终只删除当前列表的一半左右)。从下到上工作时,不会发生此问题。
酒精饮料

我看到的第一个可以一次完成此操作!荣誉
bnieland '17

在Windows 10版本1709安装的Chrome版本64.0.3282.186(正式版本)(64位)上一次运行。
JosephHarriott

7

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

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

解答2:我不相信您可以禁用此行为,但是可以通过转到工具菜单->选项->管理搜索引擎来删除搜索引擎;它们将显示在“其他搜索引擎”下。您可能可以指定删除它时不应该重新添加它,我不确定-我恰好喜欢此功能,因此我不会尝试删除它们。


谢谢@Kromey,这是一个很好的观点。我刚刚更新了问题以反映您的评论。
Amelio Vazquez-Reina

1
这个答案是不正确的,因为网站使用所谓的OpenSearch描述文档有效地将自己添加到Chrome,从而使Chrome可以将其网站的搜索引擎添加到浏览器可以与之交互的Chrome搜索引擎列表中。
Marcel

@Marcel OpenSearch仅允许网站描述其搜索功能。仍然需要浏览器对此采取行动。因此,这并不是不正确的,我只是没有在回答中包含用于“ ... [识别]网站上的搜索框...”的技术规范,因为我认为这会使本来很简单的事情变得复杂-浏览器如何找到搜索框的确切机制与普通用户无关,仅与希望添加他们的网站站长无关。
Kromey 2015年

7

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


2
以问号(?)开始搜索还将使用您的默认搜索引擎。
2014年

真好!我喜欢那胜于空间。
2014年

1
对我来说,它没有用。在Chrome 39 Win 7上,键入spacekeyword不会打开搜索界面。但是,您的解决方案在命名中的其他地方很有用。如果我希望定义的搜索出现在自动搜索的顶部,请在名称和名称前加一个空格。所有自动搜索引擎都位于下方,现在更易于管理/删除它们。
JasonXA 2014年

只需按ctrl + k即可获得该行为。
jiggunjer

6

<-背景->

在这里,我为您提供了一个不那么麻烦的备用想法(至少如果您正在运行广告拦截器,因为我们中的很多人都是出于我们的理智/安全考虑)。我喜欢尽可能使用现有的扩展名/脚本来避免整个扩展仅因一项功能而出现膨胀(最坏的情况),因此该解决方案在此原则下有效。

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

Opensearch规范中的多个地方描述了此功能的使用:

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


<-解决方案->

由于它表明OpenSearch Descriptions(OSD)具有唯一的类型,因此我们可以使用以下AdblockPlus / uBlock规则将其过滤掉:

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

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


关于我在其中发现的历史的简短记录:多年来,Chromium的工程师多次将此标签标记为“ WontFix”(多次请求使用超级用户禁用选项/标志),指出自从功能是“通常有用的”,他们的立场是利基问题应该通过扩展或第三方脚本来解决,而不是通过开发人员添加无数标志等来满足所有异想天开的解决,所以基本上我们在这里所做的只是符合他们的喜好,并保持美观和易于管理。

祝你好运!如果其他人尝试此操作,请让我们知道其工作原理!


1
这对我不起作用(尝试在cdnjs.com搜索)。我得出的结论是,没有100%可靠的解决方案:(
thdoan 2015年

这对我也不起作用-如果我在4inkjets.com上搜索,它将被添加为搜索引擎(奇怪的是,我application/opensearchdescription+xml在页面上找不到链接。)
Ivan Kozik
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.