Google Chromeの検索エンジンのリストに、特定のWebサイト(Stack Exchangeサイト、Dellなど)が自動的に追加されることに気付きました。
彼らも彼らのエントリにキーボードショートカットを追加します。ここではいくつかの例を示します。
Q1:これはChromeのデフォルトの動作ですか。 (ウェブサイトが検索エンジンのリストに自分自身を追加できるようにするには?)
Q2:Chromeでこの動作を無効にすることは可能ですか?
注:Windows 7 64上でChromeの最新バージョン11.0.696.57を実行しています。インストールされている拡張子は1つだけです。GoogleURL短縮サービスです。
@ 10basetomのコードと@shthedの影響を受けたおかげで、私は カスタム検索エンジンを追加しない Chrome拡張機能をリリースしました。
ここにソースコード があります 。
どう考えているか教えてください!
これは私を絶対に非常識なものにしていたので、私はこの問題に対するハックな、しかし効果的な解決策を見つけました。
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
この時点でChromeをシャットダウンする必要があります。
Sqliteの公式Webサイトには、さまざまなオペレーティングシステム用のコンパイル済みコマンドラインユーティリティを含む ダウンロードページ があります。 sqlite3データベースを扱うことができるどんな編集者でもうまくいくでしょうが。
コマンドラインユーティリティには、次のようなコマンドを使用します(ファイル名のスペースをエスケープまたは引用符で囲むことを忘れないでください)。
sqlite3 /path/to/Web\ Data
CREATE TRIGGER no_auto_keywordsキーワードを挿入する前に(NEW.originating_url ISNOT NULLおよびNEW.originating_url!= '')BEGIN SELECT RAISE(IGNORE);終わり;
これで終わりです。エディタを閉じて、クロムをバックアップしてください。
それが機能する方法は、chromeがkeywords
テーブルに検索エンジンを自動的に追加しようとするとき、chromeがoriginating_url
フィールドをそれが由来するWebサイトに設定することです。トリガーは基本的に空でないoriginating_url
フィールドを持つ挿入を探し、RAISE(IGNORE)
を発行してステートメントを暗黙のうちにスキップします。
手動で追加された検索エンジンはoriginating_url
を持っていないので、トリガーはそれらを追加することを可能にします。
これを行うには2つの方法があります。
このユーザスクリプトを Tamper Monkey に追加してください。
var elOpenSearch = document.querySelector('[type="application/opensearchdescription+xml"]');
if (elOpenSearch) elOpenSearch.remove();
通常のTamper Monkeyユーザーではなく、この目的のためにTamper Monkey拡張機能をロードするためだけに15〜20 MBのRAMを無駄にしたくない場合は、独自の超軽量拡張機能をロールバックできます。メモリを消費しません。手順は以下のとおりです。
OpenSearchの<link>
タグを削除してChromeが検索エンジンを自動追加しないようにするための独自の拡張機能を作成する方法:
拡張機能ファイルを配置するフォルダを作成します。
このフォルダ内に、manifest.json
とcontent.js
という名前の2つのテキストファイルを作成します。その中には、次に示すコードが含まれています。
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で作成したフォルダを選択して、「OK」をクリックします。
おめでとうございます。これでGoogle Chromeはもう少し面倒になります:-)。
制限:この解決策は100%信頼できるものではありません。検索パラメータを含むURL(例: https://cdnjs.com/#q=fastclick )にアクセスすると、まれにカスタム検索エンジンはまだ追加されます。これは、ChromeがOpenSearchの<link>
タグを解析してからユーザースクリプトまたはエクステンションがDOMから削除する可能性があるためと考えられます。
ここでややハックな回避策は私のためにちょうどうまくいきます。検索エイリアスの名前を "§$%!/()&/"のようにわかりにくい名前に変更するだけです。検索エンジンがまだそこにある間、あなたは二度とそれを見ないでしょう。あなたが "ジェンキンス"のためにグーグルすることができない場合はかなり迷惑なクロムはジェンキンスで検索するように強制するので。
この単純なユーザースクリプトを使ってみてください。
// ==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]);
}
}
大量の検索エンジンをすばやく削除するには、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);
});
});
すべてをクリアするには、これを数回貼り付けて実行する必要があります。
これを私が見つけた1つの回避策はスペースですべての私の検索を始める習慣を身につけることです。 ・Splunk median
と入力すると(ここで・
はスペース文字を表します)、ChromeはSplunk median
に対してGoogle検索を実行します。
私があなたが正しく説明していることを理解しているならば、これはウェブサイトがまったく何もしていないということです。そうではなく、Chrome自体がWebサイト上の検索ボックスを識別してから、それらをオムニバー内の検索オプションのリストに追加します。
A1:はい、これはデフォルトの動作ですが、Webサイト自体を追加するのではなく、ChromeがWebサイトを追加するのです。
A2:この動作を無効にすることはできないと思いますが、ツールメニュー - >オプション - >検索エンジンの管理を選択して検索エンジンを削除することができます。それらは[Other Search Engines]の下に表示されます。削除しても再追加しないように指定できるかもしれませんが、よくわかりません - たまたまこの機能が気に入っているので、削除しないでください。
< - 背景 - >
私はここであなたのための代替的で、それほど邪魔にならない考えを持っています(少なくともあなたが広告ブロッカーを運営しているなら、私たちの多くは私たち自身の正気/安全のためです)。私は1つの機能(最悪の場合のシナリオ)だけで拡張機能全体の肥大化を避けるためにできる限り既存の拡張機能/スクリプトを使用するのが好きなので、この解決策はこの原則のもとで機能します。
Adblockとその変種/後継者(uBlockが私の選択の武器)は、OpenSearch Description(OSD)の自動検出に使用される<link>
要素、許可される情報を含むXMLファイルを含むWebページ要素をブロックする機能を持ちます。検索エンジンを自動追加すると、これらの頭痛の種が発生します。私が調べた限りでは、Firefoxのように静かに自動追加するのではなく、検索エンジンのドロップダウンボックスでこの情報を読み、簡単に追加できるようにするため、必須ではないので「許可」と言います。
この機能の使い方はOpensearchの仕様書に複数の箇所で記述されています。
http://www.opensearch.org/Specifications/OpenSearch/1.1#Autodiscovery_in_RSS.2FAtom (このセクションの特定の詳細は、その意味では無視してください。使用中の例です)
< - 解決策 - >
OpenSearch Description(OSD)には固有のタイプがあると記載されているので、次のAdblockPlus/uBlockルールを使用してそれらを除外することができます。
##link[type="application/opensearchdescription+xml"]
私はこれをテストしました、そして規則は私のテストサイト(filehippo.comなど)で正しい一致を示しています、そして検索エンジンはもう自動追加されないので、私はこれが完全な解決策であると信じます。
Chromiumのエンジニアは、この「WontFix」というラベルを長年にわたって何度も付けて(パワーユーザー無効オプション/フラグが複数回要求されています)、これはニッチな問題と考えられていると述べています。機能は「一般的に便利」です、彼らの立場は、ニッチな問題は、開発者が無数のフラグを追加するなどの方法ではなく、拡張機能やサードパーティのスクリプトによって解決されるべきであるということです。彼らの好みに沿って、それを素晴らしくて扱いやすいままにしておきます。
頑張って!他の誰かがこれを試みるならば、私たち/私にそれがどのように働くかを知らせてください!