111

Я заметил, что некоторые сайты (например, сайты 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.

11 ответов11

60

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

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!= '') НАЧАТЬ ВЫБРАТЬ ПОДЪЕМ (ИГНОР); КОНЕЦ;

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


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

32

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

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

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

Как создать собственное расширение для удаления тега OpenSearch <link> и предотвращения автоматического добавления поисковых систем в 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 может проанализировать тег OpenSearch <link> прежде чем пользовательский скрипт или расширение получит возможность удалить его из DOM.

30

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

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

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

10

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

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

Чтобы быстро удалить большое количество поисковых систем, перейдите к 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);
        });
    });

Возможно, вам придется вставить и запустить это несколько раз, чтобы очистить все.

7

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

7

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

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

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

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

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

3

Вы можете избежать использования или создания расширений и сделать это самостоятельно в консоли JavaScript браузера. Просто перейдите к chrome://settings/searchEngines и нажмите F12, чтобы открыть панель проверки. Вставьте это в консоль и нажмите Enter:

Array.prototype.forEach.call(document.querySelectorAll('#other-search-engine-list .row-delete-button'), function(el) { el.click(this); })

Иногда требуется несколько попыток, чтобы получить все записи, поэтому вам, возможно, придется сделать это несколько раз, чтобы избавиться от всех них.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .