홈으로 돌아가기

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\<username>\AppData\Local\Google\Chrome\User Data\Default\Extensions\<id>\<version>_0\
  • Linux: ~/.config/google-chrome/Default/Extensions/<id>/<version>_0/

경로는 chrome://extensions → "개발자 모드" → "세부정보"에서 확인하세요.

Google AdInline article slot

수정할 주요 파일:

  • js/newtab/search.js — 검색 로직 및 제공자.
  • styles/newtab/style.css — 스타일 및 아이콘.

search.js 코드 분석

search.jsSearch.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()detectProvider()fvd에만 호출합니다. 로케일과 IP 기반 자동 감지가 제공자를 선택하며(VPN 사용 시 Yahoo), fill() 함수는 UI 요소 #searchList#searchLogo<li provider="<key>"> 목록 항목을 생성합니다.

Google AdInline article slot

제공자 선택 핸들러 수정

업데이트된 클릭 핸들러:

Search.prototype.clickProvider = function(option) {
  const provider = option.attr("provider");
  this.setProvider(provider); // sd.searchprovider에 저장
  this.fill();                // 로고와 메뉴 업데이트
  this.menu("close");
};

업데이트된 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;
};

로직: Google, Yandex 등 명시적 선택은 자동 감지를 우회; fvd만 자동 감지 사용.

Google AdInline article slot

아이콘용 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 사용.
  • setProvider()fill()로 UI 즉시 업데이트.
  • CSS 선택자 주석 해제로 아이콘 활성화.
  • 기존 기능 완벽 호환: Analytics.fireSearchEvent, Yandex replace().

— Editorial Team

Advertisement 728x90

다음 읽기