我已经使用“编辑搜索引擎”在 Google Chrome 中创建了一些搜索条目。
我怎样才能与同事分享这些条目?
答案1
编辑2020-07-27:
此解决方案的导出部分在 Chrome 84 中不再起作用(settings
脚本中使用的对象不再可用)。如果没有导出部分,导入脚本就没什么用,但它仍然可以用于导入带有设置的现有 JSON 文件,或将搜索引擎设置从旧版本的 Chrome/Chromium 转移到当前版本。
这是一个简单的解决方案,无需使用任何外部工具或编辑注册表即可导出和导入 Chrome 搜索引擎设置:
- 在 Chrome 中打开搜索引擎设置页面 (
chrome://settings/searchEngines
)。 - 打开 Chrome 开发者工具。
- 捷径:F12或者Ctrl+Shift+I(在 Windows 上,其他平台上的快捷方式可能有所不同)。
- 手动导航:右上角的三点菜单>更多工具>开发者工具。
- 点击安慰在 Chrome 开发者工具的顶部菜单栏中。
- 将以下脚本之一粘贴到控制台并按进入。
要下载包含搜索引擎设置的 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
文件。