返回首页

FVD Speed Dial 自定义:搜索引擎选择

本文描述了修改 FVD Speed Dial 以添加搜索引擎选择并禁用 Yahoo 自动检测。search.js 和 style.css 代码的分解及示例。结果:选择保存、动态图标以及与 fvd 模式下自动检测的兼容性。

在 FVD Speed Dial 中禁用 Yahoo:添加您自己的搜索引擎
Advertisement 728x90

FVD Speed Dial 搜索自定义:禁用自动检测并添加搜索引擎选择

切换网络设置(VPN、代理、DNS)后,FVD Speed Dial 扩展(版本 81.8.3,ID: llaficoajjainaijghjlofdfmbjpebpa)的新标签页搜索栏开始将所有查询重定向到 Yahoo。浏览器默认搜索引擎对扩展行为无影响。通过定位 js/newtab/search.jsstyles/newtab/style.css 中的问题,实现无自动检测的搜索引擎选择。

定位扩展文件

扩展文件存储在浏览器目录下:

  • Cent Browser(便携版): CentBrowserPortable\User Data\Default\Extensions\llaficoajjainaijghjlofdfmbjpebpa\81.8.3_0\
  • Windows (Chrome): C:\Users\<用户名>\AppData\Local\Google\Chrome\User Data\Default\Extensions\<ID>\<版本>_0\
  • Linux: ~/.config/google-chrome/Default/Extensions/<ID>/<版本>_0/

通过 chrome://extensions → “开发者模式” → “详细信息”查找路径。

Google AdInline article slot

关键修改文件:

  • js/newtab/search.js — 搜索逻辑和搜索引擎配置。
  • styles/newtab/style.css — 样式和图标。

分析 search.js 代码

search.js 定义了 Search.prototype.searchProviders 对象,包含搜索引擎配置:

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) { /* 域名逻辑 */ }
  },
  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}"
  }
};

设置保存在 sd.searchprovider 中。doSearch() 函数调用 getProvider() 和仅针对 fvddetectProvider()。自动检测基于语言环境和 IP 选择搜索引擎(VPN 下选 Yahoo)。

Google AdInline article slot

fill() 函数为 UI 元素 #searchList#searchLogo 生成 <li provider="<key>"> 列表项。

修改搜索引擎选择处理器

更新点击处理器:

Search.prototype.clickProvider = function(option) {
  const provider = option.attr("provider");
  this.setProvider(provider); // 保存到 sd.searchprovider
  this.fill();                // 更新图标和菜单
  this.menu("close");
};

更新 doSearch()

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;
};

逻辑:明确选择(Google、Yandex 等)绕过自动检测;fvd 使用自动检测。

修复图标 CSS

style.css 中,取消注释并修复 #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); }

图标文件(providergoogle.png 等)已存在于 images/ 目录。修改后,图标动态更新。

关键要点

  • 搜索引擎选择持久化:保存在 sd.searchprovider 中,跨会话有效。
  • 自动检测仅限 fvd:其他搜索引擎使用固定 URL。
  • UI 即时更新setProvider() 后通过 fill() 刷新。
  • 图标启用:取消 CSS 选择器注释即可。
  • 完全兼容:现有功能如 Analytics.fireSearchEvent、Yandex replace() 正常工作。

— Editorial Team

Advertisement 728x90

继续阅读