Customizace vyhledávačů v FVD Speed Dial: vypnutí automatické detekce a přidání výběru poskytovatele
Po změně síťových nastavení (VPN, proxy, DNS) začal vyhledávací řádek na nové kartě v rozšíření FVD Speed Dial verze 81.8.3 (ID: llaficoajjainaijghjlofdfmbjpebpa) přesměrovávat všechny dotazy na Yahoo. Systémový vyhledávač prohlížeče neovlivnil chování rozšíření. Lokalizace problému v souborech js/newtab/search.js a styles/newtab/style.css umožnila implementovat výběr poskytovatele bez automatické detekce.
Lokalizace souborů rozšíření
Rozšíření je uloženo v adresáři prohlížeče:
- Cent Browser (portable build):
CentBrowserPortable\User Data\Default\Extensions\llaficoajjainaijghjlofdfmbjpebpa\81.8.3_0\ - Windows (Chrome):
C:\Users\<jméno>\AppData\Local\Google\Chrome\User Data\Default\Extensions\<id>\<verze>_0\ - Linux:
~/.config/google-chrome/Default/Extensions/<id>/<verze>_0/
Cesta je určena přes chrome://extensions → „Režim vývojáře“ → „Další informace“.
Klíčové soubory pro úpravy:
js/newtab/search.js— logika vyhledávání a poskytovatelů.styles/newtab/style.css— styly a ikony.
Analýza kódu search.js
V search.js je implementován objekt Search.prototype.searchProviders s poskytovateli:
Search.prototype.searchProviders = {
fvd: {
name: "Speed Dial",
url: "https://fvdmedia.com/addon/search?qq={q}&from=chromefvdsd&installtime={time}&searchtype={type}"
},
yandex: {
name: "Yandex",
url: "https://yandex.ru/yandsearch?clid=2028026&text={q}",
locale: ["ru", "by", "kz", "uz", "uk", "kg"],
ip: ["ru", "by", "kz", "uz", "uk", "ua", "kg"],
replace: function(url) { /* logika domén */ }
},
bing: {
name: "Bing",
url: "https://search.fvdspeeddial.com/results.aspx?gd=SY1002769&searchsource=69&q={q}"
},
yahoo: {
name: "Yahoo",
url: "https://search.fvdspeeddial.com/results.aspx?gd=SY1002769&searchsource=69&q={q}"
},
google: {
name: "Google",
url: "https://www.google.com/search?q={q}"
},
duckduckgo: {
name: "DuckDuckGo",
url: "https://duckduckgo.com/?q={q}"
}
};
Nastavení jsou uložena v sd.searchprovider. Funkce doSearch() volá getProvider() a detectProvider() pouze pro fvd. Automatická detekce podle lokalizace a IP určuje poskytovatele (v případě VPN — Yahoo).
Funkce fill() generuje seznam <li provider="<klíč>"> pro UI prvky #searchList a #searchLogo.
Úprava obslužného kódu pro výběr poskytovatele
Aktualizovaný obslužný kód kliknutí:
Search.prototype.clickProvider = function(option) {
const provider = option.attr("provider");
this.setProvider(provider); // uloží do sd.searchprovider
this.fill(); // aktualizuje logo a menu
this.menu("close");
};
Aktualizovaná doSearch():
jsSearch.prototype.doSearch = async function(query) {
const fvdSpeedDial = this.fvdSpeedDial;
const Prefs = fvdSpeedDial.Prefs;
let url;
if (!query) {
const q = document.getElementById("q");
if (q.hasAttribute("clickUrl")) {
query = q.getAttribute("clickUrl");
} else {
query = q.value;
}
}
if (typeof query === "object" && query.clickurl) {
url = query.clickurl;
} else {
let provider = this.getProvider();
if (provider === "fvd") {
provider = this.detectProvider();
}
const providerData = this.searchProviders[provider];
if (String(query).trim().length === 0) {
return false;
}
await Analytics.fireSearchEvent(query, providerData?.name);
url = String(providerData.url)
.replace("{q}", encodeURIComponent(query))
.replace("{time}", Prefs.get("sd.installtime"))
.replace("{type}", Utils.getInstallVersion(fvdSpeedDial) >= 6930 ? 0 : 1)
.replace("{version}", Utils.getCurrentVersion());
if (typeof providerData.replace === "function") {
url = providerData.replace(url);
}
}
document.location = url;
};
Logika: explicitní výběr (Google, Yandex atd.) ignoruje automatickou detekci; fvd ji používá.
Oprava CSS pro ikony
V style.css jsou odkomentovány a opraveny selektory pro #searchLogo:
.searchLogo {
cursor: pointer;
width: 32px;
height: 32px;
display: inline-block;
background-repeat: no-repeat;
background-size: 32px 32px;
background-position: center center;
margin-right: 5px;
margin-top: -2px;
position: relative;
opacity: 1;
transition: opacity 75ms;
background-image: url(images/providerfvd.png);
}
.searchLogo[provider="fvd"] { background-image: url(images/providerfvd.png); }
.searchLogo[provider="yandex"] { background-image: url(images/provideryandex.png); }
.searchLogo[provider="yahoo"] { background-image: url(images/provideryahoo.png); }
.searchLogo[provider="bing"] { background-image: url(images/providerbing.png); }
.searchLogo[provider="google"] { background-image: url(images/providergoogle.png); }
.searchLogo[provider="duckduckgo"] { background-image: url(images/providerduckduckgo.png); }
Ikony (providergoogle.png a další) již jsou přítomny v images/. Po úpravách se logo dynamicky mění.
Co je důležité
- Výběr poskytovatele se ukládá v
sd.searchprovidermezi seancemi. - Automatická detekce funguje pouze pro
fvd— ostatní poskytovatelé používají pevný URL. - UI se aktualizuje okamžitě přes
fill()posetProvider(). - Ikony jsou aktivovány odkomentováním CSS-selektorů.
- Kompatibilita s existujícími funkcemi:
Analytics.fireSearchEvent,replace()pro Yandex.
— Editorial Team
Zatím žádné komentáře.