
本文介绍如何在 firefox 中通过自定义 javascript 书签(bookmarklet)实现支持动态日期、地址别名(如“h”代表家、“w”代表公司)和双参数输入的关键词式行程规划搜索,完美适配 ns(荷兰铁路)旅行 planner 网站。
Firefox 的「关键词搜索」(Keyword Search)功能允许用户在地址栏输入自定义关键词 + 空格 + 查询内容,快速跳转到预设 URL 模板。但原生机制不支持动态值(如当前时间)、条件替换(如 h → 家址)或多字段解析——此时需借助 JavaScript 书签(Bookmarklet) 实现增强逻辑。
以下是一个完整、健壮且可直接部署的解决方案:
✅ 推荐实现:简洁可靠的 Bookmarklet
将下方代码保存为 Firefox 书签,并为其设置关键词(例如 ns),之后在地址栏输入 ns + 回车,即可触发交互式行程规划:
javascript:(function(){
const home = 'Amsterdam Centraal'; // ← 替换为你的真实出发地(如家附近车站)
const work = 'Utrecht Centraal'; // ← 替换为你的真实目的地(如公司附近车站)
// 构建请求参数对象(注意:NS 使用 fragment URL,但参数需拼在 hash 后的 query string 中)
const params = {
vertrek: prompt('出发地(输入 "h" 使用家;留空默认)', home) || home,
vertrektype: 'treinstation',
aankomst: prompt('目的地(输入 "w" 使用公司;留空默认)', work) || work,
aankomsttype: 'treinstation',
type: 'vertrek',
tijd: new Date().toISOString().slice(0, 16), // 格式:2024-05-20T09:32
firstMileModality: 'PUBLIC_TRANSPORT',
lastMileModality: 'PUBLIC_TRANSPORT',
disabledTransportModalities: ''
};
// 处理别名替换
if (params.vertrek === 'h') params.vertrek = home;
if (params.aankomst === 'w') params.aankomst = work;
// 构造完整 URL:NS 要求参数位于 #/ 之后,且用 ? 开头(实际是 SPA 的路由 query)
const baseUrl = 'https://www.ns.nl/reisplanner/#/';
const searchParams = new URLSearchParams(params);
const finalUrl = `${baseUrl}?${searchParams}`;
location.href = finalUrl;
})();? 使用说明
-
添加书签:
立即学习“Java免费学习笔记(深入)”;
- 右键书签栏 →「添加网页」→ 名称填 NS 行程规划,网址粘贴上方完整 javascript:... 代码;
- 在「关键字」字段中填写你希望的快捷词(如 ns)。
-
触发搜索:
- 地址栏输入 ns + 回车 → 弹出两个提示框,分别输入出发地与目的地;
- 输入 h 或 w 即自动替换为预设地址;
- 时间自动填充为当前时刻(精确到分钟),符合 NS API 要求格式 YYYY-MM-DDTHH:MM。
-
注意事项:
? 进阶建议(可选)
- 将 home/work 改为从 localStorage 读取,实现跨会话配置持久化;
- 添加简单校验(如非空判断、禁止纯空格输入)提升健壮性;
- 封装为 WebExtension,进一步集成地址自动补全或历史记录功能(需更高权限)。
该方案规避了原始代码中复杂的字符串分割与转义逻辑,改用语义清晰的参数对象与标准 URLSearchParams,大幅提升可维护性与可靠性——真正让 Firefox 的关键词搜索,成为你日常通勤的高效入口。










