
本文介绍如何在 firefox 中通过 javascript 书签脚本(bookmarklet)扩展关键词搜索功能,动态插入当前日期、预设地址(如“h”代表家、“w”代表公司),并构建符合 ns 荷兰铁路行程规划器要求的完整 url。
Firefox 原生的关键词搜索(Keyword Search)功能强大但静态——它仅支持 %s 单一占位符替换,无法处理日期、多参数映射或条件逻辑。要实现你所需的「旅行规划器」:支持起点/终点双输入、自动填充当前时间(ISO 格式 YYYY-MM-DDTHH:MM)、并允许用简写(如 h/w)映射到预设地址,必须借助 JavaScript 书签脚本(Bookmarklet),而非纯关键词搜索。
以下是一个经过优化、健壮且可直接部署的解决方案:
✅ 推荐 Bookmarklet 代码(已修复原问题中的语法与逻辑缺陷)
javascript:(function(){
const home = 'Amsterdam Centraal'; // ← 替换为你的真实家庭车站名(需为 NS 可识别站名)
const work = 'Utrecht Centraal'; // ← 替换为你的真实工作车站名
// 当前时间:精确到分钟,格式为 '2024-06-15T14:30'
const now = new Date();
const tijd = `${now.getFullYear()}-${String(now.getMonth()+1).padStart(2,'0')}-${String(now.getDate()).padStart(2,'0')}T${String(now.getHours()).padStart(2,'0')}:${String(now.getMinutes()).padStart(2,'0')}`;
// 构建参数对象(完全匹配 NS Reisplanner API 要求)
const params = {
vertrek: prompt('出发地(输入 "h" 使用家庭地址):', home),
vertrektype: 'treinstation',
aankomst: prompt('目的地(输入 "w" 使用工作地址):', work),
aankomsttype: 'treinstation',
type: 'vertrek',
tijd: tijd,
firstMileModality: 'PUBLIC_TRANSPORT',
lastMileModality: 'PUBLIC_TRANSPORT',
disabledTransportModalities: ''
};
// 简写映射逻辑
if (params.vertrek === 'h') params.vertrek = home;
if (params.aankomst === 'w') params.aankomst = work;
// 拼装最终 URL(注意:NS 使用 fragment hash + query 参数,需手动构造)
const baseUrl = 'https://www.ns.nl/reisplanner/#/';
const searchParams = new URLSearchParams(params);
const finalUrl = `${baseUrl}?${searchParams.toString()}`;
location.href = finalUrl;
})();? 使用步骤
- 复制上方整段代码(从 javascript:(function(){ 开始,到 })(); 结束);
- 在 Firefox 地址栏中右键 → 「添加书签」→ 名称填 NS,网址粘贴该代码;
- 设置关键词:点击书签 → 「编辑」→ 在「关键字」栏填入 ns(或其他你喜欢的短关键词,如 tp);
- 使用时,在地址栏输入 ns + 回车 → 弹出两个提示框,分别输入起点和终点(支持 h/w)→ 自动跳转至 NS 行程规划页。
⚠️ 注意事项与最佳实践
- 车站名称必须准确:NS 的行程规划器依赖其内部车站数据库。请使用 NS 官网车站搜索 确认完整、标准站名(如 Rotterdam Centraal,而非 Rotterdam)。
- 时间精度:脚本使用本地系统时间生成 tijd 参数(格式 YYYY-MM-DDTHH:MM),不带秒和时区后缀,完全符合 NS 接口要求;避免使用 .toISOString().slice(0,16)(会截断错误,导致 T 后缺分钟)。
- 安全性与兼容性:此为客户端脚本,不发送数据至任何服务器;兼容 Firefox 102+(含 ESR);Chrome/Edge 用户也可复用,但关键词搜索需配合 Custom Search Engine 扩展实现类似体验。
- 进阶建议:若需免弹窗(如通过地址栏直接传参),可改用 WebExtension API 开发专用插件,实现更深层集成。
该方案兼顾简洁性与实用性,将动态逻辑、用户友好性和接口合规性融为一体,是你定制化 Firefox 行程规划工作流的理想起点。










