我注意到某些网站(例如Stack Exchange网站,戴尔等)已自动添加到我在Google Chrome浏览器中的搜索引擎列表中。

他们甚至在输入中添加键盘快捷键。以下是一些示例:


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

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

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

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

评论

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

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

看来我不值得自己决定我的浏览器应该知道哪个搜索引擎。

#1 楼

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

您将在此处找到源代码。

让我知道您的想法!

评论


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

– Greg Sadetsky
16年7月14日在14:04

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

– onnodb
17年12月3日在19:11

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

– Greg Sadetsky
17年12月7日11:00

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

– cxw
18 Mar 7 '18 at 18:49



请注意,由于许多贡献者的不懈努力,该扩展程序刚刚通过改进的检测/阻止算法进行了更新!如果它对您较早不起作用,请早点给它。干杯

– Greg Sadetsky
18年3月19日在19:04

#2 楼

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

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

首先必须找到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


添加触发器。


创建触发器no_auto_keywords在关键字插入之前(NEW.originating_url不为NULL和NEW .originating_url!='')开始选择筹码(IGNORE); END;


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


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

评论


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

–mateuscb
2014年3月14日21:55

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

–马丁·汉森(Martin Hansen)
2014年9月13日上午10:01

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

– thdoan
2015年11月6日在3:34



仅供参考:1 /首先制作此文件的副本,以防万一您把它弄乱了:) 2 /在Mac 10.11.4(El Capitan)上,我无法使用sqlitebrowser.app打开文件/数据库(“错误:无法打开数据库“〜/ Library / Application Support / Google / Chrome / Default / Web Data”:无法打开数据库文件。)3 /如果尝试在打开Chrome的同时尝试运行CREATE TRIGGER命令,则会收到错误消息:数据库已锁定,因此首先退出Chrome。4 /一旦关闭Chrome,它将成功打开数据库:/ Volumes / Macintosh \ HD / Applications / sqlite3 ./Web \ Data(在终端中,在指定目录中)

– sming
16年4月7日在12:26

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

–范琦
16-10-18在22:58



#3 楼

有两种方法可以执行此操作:





将此用户脚本添加到Tamper Monkey:

 var elOpenSearch = document.querySelector('[type="application/opensearchdescription+xml"]');
if (elOpenSearch) elOpenSearch.remove();
 


如果您不是普通的Tamper Monkey用户,并且不想浪费15-20 MB的RAM只是为了加载为此,请篡改Monkey扩展,然后即可滚动使用自己的超轻量级扩展,该扩展不会消耗任何内存。下面提供了说明。

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


创建文件夹

在此文件夹中,创建两个名为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();
 


在Chrome中,转到chrome://extensions/(将其输入到URL栏中)。
启用开发人员模式。
点击“加载解压缩的扩展程序” ',选择您在第1步中创建的文件夹,然后单击'确定'。

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

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

评论


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

– ryanmonk
16-2-21在4:27

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

– Greg Sadetsky
16-3-31在18:03



@GregSadetsky发布此作为答案,我们可以投票:)

– O'Rooney
16年7月12日在4:51

当我只是访问网站(例如,访问superuser.com)时,这种方法很好用,但是当我使用搜索栏(例如,“超级用户”页面顶部的搜索栏)时,它仍会添加搜索引擎。

–唐老鸭
20年6月19日在22:06

要禁用它,即使在Stack Exchange网站上使用搜索栏时,也需要通过添加以下代码将搜索栏的方法更改为POST:if(/stackoverflow|stackexchange|superuser|serverfault/i.test(location.hostname )){var searchBar = document.querySelector('form [role =“ search”] [method =“ get”]'); if(searchBar)searchBar.method =“ post”;}我将其限制为Stack Exchange网站,因为我已经在此处进行了测试,因此我知道它可以工作,但可能会导致搜索在某些其他网站上停止工作。

–唐老鸭
20 Jun 19'在22:07



#4 楼



是的,这是设计使然。

否,无法禁用此功能。


评论


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

–宗阮
2012年5月9日14:03

然而,有其他方法可以禁用它,如其他答案所解释的:)

– Enrico
17 Mar 11 '17 at 14:25

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

–亚历山大·萨默斯(Alex Summers)
17年9月26日在23:18

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

–秘银
19年1月22日在1:52



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

– Santropedro
19 Mar 10 '19 at 2:02

#5 楼

要快速删除大量搜索引擎,请浏览至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
17年7月7日在8:31

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

–酒精
17年11月7日15:10

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

– bnieland
17年12月22日在14:37

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

– joharr
18 Mar 2 '18 at 5:53

我希望这可以在Brave上使用(版本1.14.84 Chromium:85.0.4183.121(正式版本)(64位)),但没有成功。它也不适用于Windows Chrome版本85.0.4183.121(正式版本)(64位)。

–瑞安
20-10-7在14:16

#6 楼

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

评论


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

– TJ Biddle
2013年6月3日23:06

它对詹金斯(Jenkins),吉拉(Jira)和汇合点做到了这一点-令我非常疯狂,因为我无法从地址栏中启动对这三个相关内容的常规搜索。到目前为止,这是我所见过的最好的唯一可行的解​​决方法。干杯。

–马特·克拉克(Matt Clark)
2015年8月4日在22:35



@MattClark吉拉!我想搜索有关吉拉的信息,而不是其中!

– ErikE
15/09/23在18:22

您的情况如何?对于我来说,要触发现场搜索,我必须在多功能栏中键入其关键字,然后按Tab。然后,它变为现场搜索,我可以继续输入搜索字符串。如果只想搜索关键字或包含该关键字的字符串,请键入关键字,空格,搜索字符串的其余部分并按Enter,然后使用默认搜索引擎进行搜索。因此它不会互相干扰。只需在关键字后使用空格即可使用默认搜索引擎进行搜索,并使用制表符在网站上进行搜索。

– David FerenczyRogožan
16-12-12在16:37



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

– Gerrat
17年4月24日在18:30

#7 楼

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

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


评论


在哪里添加此脚本?或执行它?

–mateuscb
14年3月14日在21:23

@mateuscb您可以从这里获取。然后,将脚本放到chrome:chrome:// extensions /的扩展程序设置页面中。

– VictorHäggqvist
2014年5月14日14:39



这个。是的。太棒了我需要创建一个虚拟manifest.json(按照此SO答案,并通过开发人员模式(作为未压缩的扩展名)进行安装,但除此之外,它的工作方式就像对待。

–子宫
2014年6月11日下午5:58

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

– JasonXA
2014年12月28日在17:19

您也可以使用以下代码:document.querySelector('[type =“ application / opensearchdescription + xml”]')。remove(); (请参见下面的答案)。

– thdoan
15年11月6日在6:12

#8 楼

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

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

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

评论


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

–阿梅里奥·巴斯克斯·雷纳(Amelio Vazquez-Reina)
2011年4月27日在17:49

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

–马塞尔
2015年6月11日,12:01

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

– Kromey
15年6月11日在16:35

#9 楼

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

评论


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

–阿里
2014年5月30日在2:07

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

– Jun-Dai Bates-Kobashigawa
2014年5月30日14:34

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

– JasonXA
2014-12-28 17:21



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

– Jiggunjer
17年7月7日在8:25

#10 楼

<-背景->

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

Adblock及其变体/ successors(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”(多次请求使用高级用户禁用选项/标志),指出自从功能通常是有用的,他们的立场是利基问题应该通过扩展或第三方脚本来解决,而不是通过开发人员添加无数标记等来满足所有异想天开的解决,所以基本上我们在这里所做的只是符合他们的喜好并使其保持良好且易于管理。

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

评论


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

– thdoan
2015年11月6日,下午3:46

这对我也不起作用-如果我在4inkjets.com上搜索,它将被添加为搜索引擎(奇怪的是,我在页面上找不到application / opensearchdescription + xml链接。)

–伊万·科兹克(Ivan Kozik)
17年9月26日在23:58

#11 楼


转到chrome://settings/searchEngines

打开开发人员工具
在Javascript控制台选项卡中运行以下内容

const otherEngines = document.querySelector("body > settings-ui")
                    .shadowRoot.querySelector("#main")
                    .shadowRoot.querySelector("settings-basic-page")
                    .shadowRoot.querySelector("#basicPage > settings-section.expanded > settings-search-page")
                    .shadowRoot.querySelector("#pages > settings-subpage > settings-search-engines-page")
                    .shadowRoot.querySelector("#otherEngines").shadowRoot

let n = otherEngines.querySelector('iron-list').childElementCount - 1;
let rmbtn = otherEngines.querySelector('#frb0')
                        .shadowRoot.querySelector('#delete')

const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));

while(n--) {
    rmbtn.click();
    await sleep(2000);
}


调整您认为合适的两次点击之间的睡眠时间。