Retour à l'accueil

Personnalisation FVD Speed Dial : Sélection du moteur de recherche

L'article décrit la modification de FVD Speed Dial pour ajouter la sélection du moteur de recherche et désactiver la détection automatique Yahoo. Décomposition du code search.js et style.css avec exemples. Résultat : sauvegarde de la sélection, icônes dynamiques et compatibilité avec la détection automatique en mode fvd.

Désactiver Yahoo dans FVD Speed Dial : Ajoutez votre propre moteur de recherche
Advertisement 728x90

Personnalisation des moteurs de recherche dans FVD Speed Dial : Désactivation de la détection auto et ajout de la sélection de fournisseur

Après un changement de paramètres réseau (VPN, proxy, DNS), la barre de recherche de l'onglet nouveau dans l'extension FVD Speed Dial version 81.8.3 (ID : llaficoajjainaijghjlofdfmbjpebpa) a commencé à rediriger toutes les requêtes vers Yahoo. Le moteur de recherche par défaut du navigateur n'avait aucun impact sur le comportement de l'extension. L'identification du problème dans js/newtab/search.js et styles/newtab/style.css a permis d'ajouter la sélection de fournisseur sans détection automatique.

Localisation des fichiers de l'extension

L'extension est stockée dans le répertoire du navigateur :

  • Cent Browser (version portable) : CentBrowserPortable\User Data\Default\Extensions\llaficoajjainaijghjlofdfmbjpebpa\81.8.3_0\
  • Windows (Chrome) : C:\Users\<nom_utilisateur>\AppData\Local\Google\Chrome\User Data\Default\Extensions\<id>\<version>_0\
  • Linux : ~/.config/google-chrome/Default/Extensions/<id>/<version>_0/

Trouvez le chemin via chrome://extensions → « Mode développeur » → « Détails ».

Google AdInline article slot

Fichiers clés à modifier :

  • js/newtab/search.js — logique de recherche et fournisseurs.
  • styles/newtab/style.css — styles et icônes.

Analyse du code de search.js

search.js définit l'objet Search.prototype.searchProviders avec les fournisseurs :

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) { /* logique de domaine */ }
  },
  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}"
  }
};

Les paramètres sont sauvegardés dans sd.searchprovider. La fonction doSearch() appelle getProvider() et detectProvider() uniquement pour fvd. La détection automatique basée sur la locale et l'IP sélectionne le fournisseur (Yahoo avec VPN).

Google AdInline article slot

La fonction fill() génère des éléments <li provider="<key>"> pour les listes UI #searchList et #searchLogo.

Modification du gestionnaire de sélection de fournisseur

Gestionnaire de clic mis à jour :

Search.prototype.clickProvider = function(option) {
  const provider = option.attr("provider");
  this.setProvider(provider); // sauvegarde dans sd.searchprovider
  this.fill();                // met à jour le logo et le menu
  this.menu("close");
};

doSearch() mis à jour :

Google AdInline article slot
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;
};

Logique : Les choix explicites (Google, Yandex, etc.) contournent la détection automatique ; fvd l'utilise.

Correction du CSS pour les icônes

Dans style.css, décommenté et corrigé les sélecteurs pour #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); }

Les icônes (providergoogle.png, etc.) sont déjà dans images/. Après les modifications, le logo se met à jour dynamiquement.

Points clés à retenir

  • La sélection de fournisseur persiste dans sd.searchprovider entre les sessions.
  • Détection automatique uniquement pour fvd — les autres fournisseurs utilisent des URL fixes.
  • Mise à jour de l'interface instantanée via fill() après setProvider().
  • Icônes activées en décommentant les sélecteurs CSS.
  • Compatibilité totale avec les fonctionnalités existantes : Analytics.fireSearchEvent, replace() de Yandex.

— Editorial Team

Advertisement 728x90

Lire ensuite