基于Firefox关键词搜索的行程规划工具JavaScript实现需求
Firefox关键词搜索行程规划工具优化实现
需求说明
利用Firefox关键词搜索功能实现荷兰铁路(NS)行程规划工具,核心要求:
- 自动在URL中填入符合格式的当前日期时间(格式如
2023-03-03T15:59) - 支持地址缩写快速替换:输入
h对应家庭地址,w对应工作地址
Firefox关键词搜索原理:将输入字符串填入预定义URL的%s占位符,例如google.com/search?q=%s搭配输入cats and dogs会跳转至https://www.google.com/search?hl=en&q=cats%20and%20dogs。
目标URL格式:
https://www.ns.nl/reisplanner/#/?vertrek=STARTLOCATION%20Centraal&vertrektype=treinstation&aankomst=ENDLOCATION&aankomsttype=treinstation&type=vertrek&tijd=2023-03-03T15:59&firstMileModality=PUBLIC_TRANSPORT&lastMileModality=PUBLIC_TRANSPORT&disabledTransportModalities=
优化后的完整代码
javascript:var s='%s'; // 地址缩写映射表,可自行扩展更多缩写 const addressMap = { 'h': 'My Home Street 1 My Home Town', 'w': 'My Work Street 1 Work City' }; // 生成符合要求的当前日期时间字符串 const currentDateInRightFormat = new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('.')[0].slice(0,16); // 构建基础URL,直接填入当前时间 let url = 'https://www.ns.nl/reisplanner/#/?vertrek=%s&vertrektype=treinstation&aankomst=%s&aankomsttype=treinstation&type=vertrek&tijd=' + currentDateInRightFormat + '&firstMileModality=PUBLIC_TRANSPORT&lastMileModality=PUBLIC_TRANSPORT&disabledTransportModalities='; // 处理带引号的空格地址(保留原逻辑) let t = ''; let qc = 0; const chunks = url.split('%s'); for(let i=0; i<s.length; i++){ if(s.charAt(i)=='%22') qc ^= 1; t += ((s.charAt(i)==' ' && qc)?'^':s.charAt(i)); } const args = t.split(/\s/); // 拼接最终URL并替换缩写 let nurl = ''; for(let i=0; i<chunks.length; i++){ nurl += chunks[i]; if(args[i] !== undefined){ // 优先替换缩写,否则还原带空格的地址 const finalArg = addressMap[args[i]] || args[i].replace(/\^/g,' '); // 编码地址避免URL格式错误 nurl += encodeURIComponent(finalArg); } } location.replace(nurl);
关键优化点
- 日期自动填充:将生成的
currentDateInRightFormat直接拼接进URL的tijd参数,无需手动输入日期,确保每次使用都是当前时间。 - 缩写替换逻辑:通过
addressMap对象存储缩写与地址的对应关系,处理输入参数时自动检测并替换,可随时扩展更多缩写(如添加f代表朋友家地址)。 - 参数编码:添加
encodeURIComponent对地址参数进行编码,避免带空格或特殊字符的地址导致URL失效。 - 语法修复:修正原代码中
currentDateInRightFormat末尾多余的括号,使用let/const声明变量避免全局污染。
使用示例
- 输入
h w:起点替换为家庭地址,终点替换为工作地址,自动填充当前时间 - 输入
"Amsterdam Centraal" w:起点为阿姆斯特丹中央车站,终点替换为工作地址 - 输入
h "Rotterdam Centraal":起点为家庭地址,终点为鹿特丹中央车站
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

