Google Chrome автоматически добавляет сайты в мой список поисковых систем?


121

Я заметил, что некоторые сайты (например, сайты Stack Exchange, Dell и т. Д.) Автоматически добавляются в мой список поисковых систем в Google Chrome.

Они даже добавляют сочетание клавиш к своей записи. Вот некоторые примеры:

  • Dell: клавиатура -> Dell.com
  • Веб-мастера стека Exchange: клавиатура -> webmasters.stackexchange.com
  • Reuters: Клавиатура -> reuters.com

Q1: это поведение по умолчанию в Chrome? (чтобы веб-сайты добавили себя в список поисковых систем?)

Q2: возможно ли отключить это поведение в Chrome?

Примечание. Я работаю с последней версией Chrome: 11.0.696.57 в Windows 7 64, и у меня установлено только одно расширение: сокращение URL Google.


33
@ Сатья, почему? Я хочу иметь возможность отключить его. Если ваш вопрос состоит в том, почему я должен отключить что-то вроде этого : интерфейс для редактирования поисковых систем не особенно хорош, и по мере роста списка трудно сказать, какие поисковые системы я добавил вручную, а какие были добавлены автоматически. Также сложнее найти конкретную запись в большом списке.
Амелио Васкес-Рейна

16
@ Сатья - Множество причин: * Удобство: иногда вы хотите искать ПО сайту, а не ПО этому сайту. * Согласованность: случайное и бесшумное добавление новых «поисковых систем» приводит к неожиданному поведению в омнибоксе. * Конфиденциальность: Chrome не сообщает вам, когда решит добавить новые «поисковые системы», и они не исчезают, когда вы очищаете историю просмотров. * Обычная вежливость. Разве я не могу выбрать, включить ли эту «функцию» или, если ее не получится, хотя бы выбрать получение информации, когда Chrome решит добавить сайт, чтобы я мог отменить это решение?
Фенри

1
Кажется, я не достоин решать, какие поисковые системы должен знать мой браузер.
Андерс Линден

Ответы:


34

Благодаря коду @ 10basetom и вдохновленному @shthed, я выпустил расширение Chrome « Не добавлять пользовательские поисковые системы», которое делает именно это.

Вы найдете исходный код здесь .

Дайте мне знать, что вы думаете!


1
@ O'Rooney Спасибо! Я вижу, как время от времени некоторые сайты проскальзывают по расширению, но гораздо лучше очистить несколько поисковых систем за месяц, чем проводить почти полную еженедельную «чистку» ... Ура!
Грег Садецкий

4
На самом деле больше не работает: множество пользовательских поисковых систем по-прежнему добавляются.
onnodb

1
@onnodb спасибо за примечание, я, к сожалению, не успел обновить расширение.
Грег

1
@onnodb, Грег, не могли бы вы (или другие заинтересованные лица) попробовать эту вилку ? Проверьте, затем загрузите .../srcкак распакованное расширение. Дайте мне знать, как это происходит. Спасибо!
cxw

3
Небольшое замечание, что расширение было только что обновлено с помощью значительно улучшенного алгоритма обнаружения / блокировки, благодаря многим усилиям со стороны ряда участников! Дайте ему назад, если раньше у вас не получалось. Приветствия
Грег Садецкий

61

Это сводило меня с ума, и я нашел хакерское, но эффективное решение проблемы.

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

Добавьте триггер.

СОЗДАЙТЕ TRIGGER no_auto_keywords ПЕРЕД ВСТАВКОЙ В КЛЮЧЕВЫЕ КЛЮЧИ, КОГДА (NEW.originating_url НЕ ПУСТО И А NEW.originating_url! = '') НАЧАТЬ ВЫБЕРИТЕ RAISE (IGNORE); КОНЕЦ;

Вы сделали Закройте редактор и запустите Chrome.


Это работает так, что, когда chrome добавляет автоматическое добавление поисковой системы в keywordsтаблицу, chrome устанавливает originating_urlполе для веб-сайта, с которого он пришел. Триггер в основном ищет любые вставки с непустым originating_urlполем и выдает a, в результате RAISE(IGNORE)чего оператор молча пропускается.
У поисковых систем, добавленных вручную, их нет originating_url, поэтому триггер позволяет их добавлять.


2
Попробовав несколько редакторов, SQLiteStudio стал моим любимым. Я никак не связан с этим продуктом. Просто полезный инструмент, который я нашел после некоторых поисков.
mateuscb

1
Это здорово, и это работает. Однако для меня Chrome все же добавил поисковые системы не в базу данных, а в другую папку «Синхронизация данных резервного копирования». Отключите права на запись для этой папки в Windows / Linux, и она исчезнет навсегда.
Мартин Хансен,

Это больше не работает, по крайней мере, в Chrome v47beta. После перезапуска Chrome автоматически добавленная поисковая система остается в списке, хотя ввод ключевого слова больше не вызывает его.
thdoan

К вашему сведению: 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\ DataTerminal, когда в указанном каталоге) HTH
sming

Я пытался удалить из ключевых слов, где идентификатор> 2; и Google просто синхронизирует их обратно с сервера. Думаю, уже слишком поздно, после того, как у меня уже установлены тысячи поисковых систем.
Ци Фан

34

Есть два способа сделать это:

  1. Добавьте этот пользовательский скрипт в Tamper Monkey :

    var elOpenSearch = document.querySelector('[type="application/opensearchdescription+xml"]');
    if (elOpenSearch) elOpenSearch.remove();
  2. Если вы не являетесь обычным пользователем Tamper Monkey и не хотите тратить 15-20 МБ ОЗУ просто для того, чтобы загрузить расширение Tamper Monkey для этой цели, тогда вы можете свернуть свое собственное сверхлегкое расширение, которое не будет занимать память. , Инструкции приведены ниже.

Как создать собственное расширение для удаления <link>тега OpenSearch и предотвращения автоматического добавления поисковых систем в Chrome:

  1. Создайте папку, в которую вы будете помещать файлы расширения.

  2. Внутри этой папки создайте два текстовых файла с именами manifest.jsonи content.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, и нажмите «ОК».

Поздравляем! Теперь Google Chrome должен быть немного менее раздражающим в использовании :-).

Ограничение: это решение не является надежным на 100%. Если перейти по URL-адресу, содержащему параметр поиска (например, https://cdnjs.com/#q=fastclick ), то в редких случаях пользовательская поисковая система все равно будет добавлена. Я подозреваю, что это связано с тем, что Chrome может анализировать <link>тег OpenSearch до того, как пользовательский скрипт или расширение получит возможность удалить его из DOM.


2
Я удивлен, что никто не опубликовал это как официальное расширение магазина, похоже, это будет популярно. В идеале я хотел бы, чтобы расширение спросило меня перед добавлением поисковой системы, или чтобы в адресной строке был значок, который позволяет мне добавлять его, как RSS-каналы.
ryanmonk

7
Спасибо за отличный код и @shthed спасибо за вдохновение! Я только что выпустил расширение Google Chrome, которое делает именно это. Вы можете найти это здесь . Исходный код здесь . Дайте мне знать, что вы думаете! :-)
Грег Садецкий

@GregSadetsky Опубликуйте это как ответ, и мы могли бы проголосовать за него :)
O'Rooney

24

2
Мне нравится этот ответ. Это просто, но информативно
nXqd

8
И все же есть способы отключить его, как объясняют другие ответы :)
Enrico

6
«Да, это по замыслу». Это плохой и неправильный дизайн для автоматического добавления вещей в систему без участия пользователя по этому вопросу. Вредоносные сайты могут легко воспользоваться этим. «Нет, это невозможно отключить». Очевидно, есть, когда это программное обеспечение, всегда есть способ. Быть ленивым и говорить, что нет, не является решением. Этот ответ должен быть удален, и писатель предупрежден.
Алекс Саммерс

Мой пользовательский поисковик потерял после очистки кеша. Я часами открывал несколько сайтов, но эти движки не возвращались. Вы знаете, как их вернуть? (Я не хочу добавлять их вручную, слишком много)
Мифрил

этот неправильный ответ получает голосование. Разве это не должно быть удалено или отредактировано, чтобы исправить это?
Сантропедро

10

Вот несколько хакерский обходной путь, который прекрасно работает для меня. Просто переименуйте псевдоним поиска во что-то загадочное, наприме𠫧 $%! / () & /» . Пока поисковая система все еще там, вы никогда не увидите ее снова, никогда. Довольно раздражает, если вы не можете найти в поиске «jenkins», потому что хром заставляет вас искать в jenkins.


Серьезно - безумно раздражает. Спасибо за чаевые.
TJ Biddle

2
Он делает это для меня jenkins, jiraи confluence- Это сводит меня с ума абсолютно , что я не могу начать общий поиск из моей адресной строке , что связано с этими тремя. Это, безусловно, лучший и единственный работающий обходной путь, который я видел. Приветствия.
Мэтт Кларк

1
@MattClark jiraточно! Я хочу искать о Джира, а не в нем!
ErikE

Как себя ведет в вашем случае? Для того, чтобы запустить поиск по сайту , я должен набрать его ключевое слово в омнибар пресс Tab . Затем он меняется на поиск по сайту, и я могу продолжать вводить строку поиска. Если я хочу найти только ключевое слово или строку, содержащую ключевое слово, я набираю ключевое слово, пробел , остаток строки поиска и ввод, и я ищу, используя поисковую систему по умолчанию. Так что это не мешает друг другу. Просто используйте пробел после ключевого слова для поиска, используя поисковую систему по умолчанию, и вкладку для поиска по сайту.
Давид Ференци Рогожан

@DawidFerenczy: Это не так, как это работает для всех нас. Пространство все еще использует эту поисковую систему. Я набираю git, затем пробел, и он мгновенно меняется, чтобы использовать поисковую систему git (которую я удалял бесчисленное количество раз).
Gerrat

9

Попробуйте использовать этот простой usercript:

// ==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

2
@mateuscb Вы можете получить это здесь . Затем просто перетащите скрипт на страницу настроек расширений в chrome, chrome: // extensions /.
Виктор Хэггквист

Этот. Является. Потрясающие. Мне нужно было создать манекен manifest.json(согласно этому SO-ответу и установить его через режим разработки (как распакованное расширение), но кроме этого он работал как удовольствие.
womble

1
Или вы можете использовать его в Tamper Monkey. Если вы привыкли вносить изменения в веб-сайты, TM должен быть обязательным дополнением.
JasonXA

Вы также можете использовать этот однострочник: document.querySelector('[type="application/opensearchdescription+xml"]').remove();(см. Мой ответ ниже).
thoan

9

Чтобы быстро удалить большое количество поисковых систем, перейдите к chrome: // settings / searchEngines, нажмите Ctrl-Shift-J (Opt-Cmd-J в OSX), чтобы войти в консоль 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 раз в консоль разработчика, чтобы удалить более 100 записей, которые у меня были. Хотел бы я знать, как превратить его в букмарклет одним кликом.
Джиггунджер

1
Я изменил его, чтобы сначала отсортировать список в обратном порядке (на основе modelIndex), поскольку его значение сбрасывается при каждом удалении записи (так что обычно вы в конечном итоге удаляете только половину текущего списка) при работе сверху вниз. При работе снизу вверх эта проблема не возникает.
алкоголь

Первый, который я увидел, может сделать это за один раз! Престижность.
bnieland

Работал за один раз на моей Windows 10, версия 1709, установка Chrome версии 64.0.3282.186 (Официальная сборка) (64-разрядная версия).
Джозеф Харриотт

7

Если я правильно понимаю, что вы описываете, то это не то, что веб-сайты делают вообще. Скорее, Chrome сам определяет поля поиска на веб-сайтах, а затем сам добавляет их в свой список параметров поиска в омнибар.

A1: Да, это поведение по умолчанию, но это не сайты, добавляющие себя, это Chrome, добавляющий сайты.

A2: Я не верю, что вы можете отключить это поведение, однако вы можете удалить поисковые системы, перейдя в меню инструментов -> Параметры -> Управление поисковыми системами; они появятся в разделе «Другие поисковые системы». Возможно, вы сможете указать, что не следует повторно добавлять его при удалении, я не уверен - мне нравится эта функция, поэтому я не буду пытаться удалить их.


Спасибо @Kromey, это хороший момент. Я только что обновил вопрос, чтобы отразить ваш комментарий.
Амелио Васкес-Рейна

1
Этот ответ неверен, веб-сайты действительно добавляют себя в Chrome, поскольку они используют так называемый документ описания OpenSearch, чтобы Chrome мог добавить поисковую систему своего веб-сайта в список поисковых систем Chrome, с которыми может взаимодействовать ваш браузер.
Марсель

@Marcel OpenSearch просто позволяет сайтам описывать свою функцию поиска. Это все еще требует, чтобы браузер действовал на этом. Поэтому это не является неправильным, я просто не включил техническую спецификацию, которая используется для «... [идентифицировать] окна поиска на веб-сайтах ...» в моем ответе, так как я чувствовал, что это усложнило бы простой вопрос - точный механизм того, как браузер находит окно поиска, не имеет отношения к среднему пользователю, только к веб-мастерам, которые хотят, чтобы их добавили.
Kromey

7

Один из обходных путей, который я нашел для этого, - приобрести привычку начинать все мои поиски с пробела. Если вы введете ・Splunk median(где символ пробела), Chrome выполнит поиск Google Splunk median.


2
Начиная поиск с вопросительным знаком (?), Вы также будете использовать поисковую систему по умолчанию.
Ари

Приятно! Мне нравится это лучше, чем пространство.
Джун-Дай Бейтс-Кобашигава

1
Для меня это не сработало. В Chrome 39, Win 7, ввод пробела не вызывал интерфейс поиска. Тем не менее, ваше решение было полезно в другом месте, в именовании. Если я хочу, чтобы мои определенные поиски появлялись поверх автоматических, один пробел перед именем и presto. Все автоматизированные поисковые системы идут ниже, и теперь ими проще управлять / удалять.
JasonXA

просто нажмите Ctrl + K, чтобы получить такое поведение.
Джиггунджер

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» несколько раз (опция / флаг отключения опытного пользователя запрашивалась несколько раз), заявляя, что это считается нишей, поскольку проблема Эта функция «обычно полезна», их позиция заключается в том, что нишевые проблемы должны решаться с помощью расширений или сторонних скриптов, а не с помощью разработчиков, добавляющих бесчисленные флаги и тому подобное для удовлетворения всех прихотей, поэтому в основном то, что мы здесь делаем, это просто в соответствии с их предпочтениями и делает его красивым и управляемым.

Удачи! Если кто-то попробует это, сообщите нам / мне, как это работает!


1
Это не сработало для меня (попробуйте поискать на cdnjs.com ). Я пришел к выводу, что нет 100% надежного решения :(
thoan

Это также не работает для меня - если я ищу на 4inkjets.com, он добавляется в качестве поисковой системы (странно, я не могу найти application/opensearchdescription+xmlссылку на странице.)
Иван Козик
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.