如何分享我的 Google Chrome 搜索引擎条目?

如何分享我的 Google Chrome 搜索引擎条目?

我已经使用“编辑搜索引擎”在 Google Chrome 中创建了一些搜索条目。

我怎样才能与同事分享这些条目?

答案1

编辑2020-07-27:

此解决方案的导出部分在 Chrome 84 中不再起作用(settings脚本中使用的对象不再可用)。如果没有导出部分,导入脚本就没什么用,但它仍然可以用于导入带有设置的现有 JSON 文件,或将搜索引擎设置从旧版本的 Chrome/Chromium 转移到当前版本。

这是一个简单的解决方案,无需使用任何外部工具或编辑注册表即可导出和导入 Chrome 搜索引擎设置:

  1. 在 Chrome 中打开搜索引擎设置页面 ( chrome://settings/searchEngines)。
  2. 打开 Chrome 开发者工具。
  • 捷径:F12或者Ctrl+Shift+I(在 Windows 上,其他平台上的快捷方式可能有所不同)。
  • 手动导航:右上角的三点菜单>更多工具>开发者工具
  1. 点击安慰在 Chrome 开发者工具的顶部菜单栏中。
  2. 将以下脚本之一粘贴到控制台并按进入

要下载包含搜索引擎设置的 JSON 文件:

(function exportSEs() {
  /* Auxiliary function to download a file with the exported data */
  function downloadData(filename, data) {
    const file = new File([data], { type: 'text/json' });
    const elem = document.createElement('a');
    elem.href = URL.createObjectURL(file);
    elem.download = filename;
    elem.click();
  }

  /* Actual search engine export magic */
  settings.SearchEnginesBrowserProxyImpl.prototype.getSearchEnginesList()
    .then((searchEngines) => {
      downloadData('search_engines.json', JSON.stringify(searchEngines.others));
    });
}());

要从使用上述脚本创建的 JSON 文件导入设置:

(async function importSEs() {
  /* Auxiliary function to open a file selection dialog */
  function selectFileToRead() {
    return new Promise((resolve) => {
      const input = document.createElement('input');
      input.setAttribute('type', 'file');
      input.addEventListener('change', (e) => {
        resolve(e.target.files[0]);
      }, false);
      input.click();
    });
  }

  /* Auxiliary function to read data from a file */
  function readFile(file) {
    return new Promise((resolve) => {
      const reader = new FileReader();
      reader.addEventListener('load', (e) => {
        resolve(e.target.result);
      });
      reader.readAsText(file);
    });
  }

  const file = await selectFileToRead();
  const content = await readFile(file);
  const searchEngines = JSON.parse(content);
  searchEngines.forEach(({ name, keyword, url }) => {
    /* Actual search engine import magic */
    chrome.send('searchEngineEditStarted', [-1]);
    chrome.send('searchEngineEditCompleted', [name, keyword, url]);
  });
}());

笔记

  • 我在 Windows 8.1 上的 Chrome 75.0.3770.100 中测试了脚本。
  • 脚本导出和导入搜索引擎其他搜索引擎部分,但它们可以轻松调整以包括默认搜索引擎。
  • 不要尝试将脚本作为书签小程序分发,书签小程序不会在chrome://URL 上执行(我曾经这样做过)。

答案2

以下是在 Linux 上将 Chrome 搜索引擎导出为 CSV 的单个命令:

sqlite3 -csv ~/.config/chromium/Default/Web\ Data 'select short_name,keyword,url,is_active from keywords' > ~/search-engines.csv

您需要安装 sqlite3。~/.config/chrome如果您使用的是 Windows,请将其替换为相应的 Windows 路径。应该是这样的%AppData%\Local\Google\Chrome\User Data

导出为 SQL 以便重新导入到其他地方

除了导出到 CSV 之外,您还可以导出到 sqlite 插入语句:

(printf 'begin transaction;\n'; sqlite3 ~/.config/chromium/Default/Web\ Data 'select short_name,keyword,url,favicon_url from keywords' | awk -F\| '{ printf "insert into keywords (short_name, keyword, url, favicon_url) values ('"'"%s"'"', '"'"%s"'"', '"'"%s"'"', '"'"%s"'"');\n", $1, $2, $3, $4 }'; printf 'end transaction;\n') > ~/search-engine-export.sql

然后复制~/search-engine-export.sql到另一台机器,并使用此命令导入:

sqlite3 ~/.config/chromium/Default/Web\ Data < search-engine-export.sql

确保Web Data按照上面所述将路径替换为您机器上的路径。

答案3

...搭便车https://superuser.com/a/1458616/55621但尝试更新它以与当前版本的 Chrome 兼容。这在 Mac 上的 Chrome 88 左右有效。

要下载包含搜索引擎设置的 JSON 文件:

(function exportSEs() {
  /* Auxiliary function to download a file with the exported data */
  function downloadData(filename, data) {
    const file = new File([data], { type: 'text/json' });
    const elem = document.createElement('a');
    elem.href = URL.createObjectURL(file);
    elem.download = filename;
    elem.click();
  }

  let searchEngines = [];
  document.querySelector('settings-ui').shadowRoot
    .querySelector('settings-main').shadowRoot
    .querySelector('settings-basic-page').shadowRoot
    .querySelector('settings-search-page').shadowRoot
    .querySelector('settings-search-engines-page').shadowRoot
    .querySelector('settings-search-engines-list#otherEngines').shadowRoot
    .querySelectorAll('settings-search-engine-entry')
    .forEach($el => searchEngines.push(
      {
        name: $el.shadowRoot.querySelector('#name-column').textContent,
        keyword: $el.shadowRoot.querySelector('#keyword-column').textContent,
        url: $el.shadowRoot.querySelector('#url-column').textContent
      })
    )

  downloadData('search_engines.json', JSON.stringify(searchEngines));
}());

要从使用上述脚本创建的 JSON 文件导入设置:

(async function importSEs() {
  /* Auxiliary function to open a file selection dialog */
  function selectFileToRead() {
    return new Promise((resolve) => {
      const input = document.createElement('input');
      input.setAttribute('type', 'file');
      input.addEventListener('change', (e) => {
        resolve(e.target.files[0]);
      }, false);
      input.click();
    });
  }

  /* Auxiliary function to read data from a file */
  function readFile(file) {
    return new Promise((resolve) => {
      const reader = new FileReader();
      reader.addEventListener('load', (e) => {
        resolve(e.target.result);
      });
      reader.readAsText(file);
    });
  }

  const file = await selectFileToRead();
  const content = await readFile(file);
  const searchEngines = JSON.parse(content);
  searchEngines.forEach(({ name, keyword, url }) => {
    /* Actual search engine import magic */
    chrome.send('searchEngineEditStarted', [-1]);
    chrome.send('searchEngineEditCompleted', [name, keyword, url]);
  });
}());

这很可能会在 Chrome 的后续版本中出现,并且可能有更好的方法来遍历 dom。

答案4

使用 Google Takeouthttps://takeout.google.com将您的 Chrome 搜索引擎导出到 json 文件。

选择Chrome,然后选择All Chrome data included,或SearchEngines

导出将包含一个SearchEngines.json文件。

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

相关内容