Firefox 关键词搜索结合 JavaScript 实现智能行程规划

13次阅读

Firefox 关键词搜索结合 JavaScript 实现智能行程规划

本文介绍如何在 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; })();

? 使用说明

  1. 添加书签

    立即学习Java免费学习笔记(深入)”;

    • 右键书签栏 →「添加网页」→ 名称填 NS 行程规划,网址粘贴上方完整 javascript:… 代码;
    • 在「关键字」字段中填写你希望的快捷词(如 ns)。
  2. 触发搜索

    • 地址栏输入 ns + 回车 → 弹出两个提示框,分别输入出发地与目的地;
    • 输入 h 或 w 即自动替换为预设地址;
    • 时间自动填充为当前时刻(精确到分钟),符合 NS API 要求格式 yyYY-MM-DDTHH:MM。
  3. 注意事项

    • ✅ prompt() 是 Firefox 书签脚本中唯一可靠获取用户输入的方式(%s 多参数解析在现代 Firefox 中已受限且不稳定);
    • ⚠️ NS 网站使用前端路由(#/),因此参数必须拼在 #/?… 后,而非传统 ?;本方案已严格遵循其 URL 结构;
    • ? 若需支持中文地址,请确保浏览器编码正常(现代 Firefox 默认 UTF-8,无需额外处理);
    • ? 不要尝试用 location.replace() 或 eval() 解析复杂字符串——易出错且存在安全风险;prompt + URLSearchParams 是最轻量、兼容性最佳的组合。

? 进阶建议(可选)

  • 将 home/work 改为从 localStorage 读取,实现跨会话配置持久化;
  • 添加简单校验(如非空判断、禁止纯空格输入)提升健壮性;
  • 封装为 WebExtension,进一步集成地址自动补全或历史记录功能(需更高权限)。

该方案规避了原始代码中复杂的字符串分割与转义逻辑,改用语义清晰的参数对象与标准 URLSearchParams,大幅提升可维护性与可靠性——真正让 Firefox 的关键词搜索,成为你日常通勤的高效入口。

text=ZqhQzanResources