JS浏览器扩展URL替换失效:使用replace与pathArray时出现内容追加问题
问题分析与解决方案
看起来你在修改URL路径的时候踩了两个小坑,咱们一步步来捋清楚:
首先看你当前代码的问题点:
- 你修改了
pathArray[1] = 'node',但之后并没有用这个修改后的数组重新生成新的路径,而是直接用了原始的l.pathname,这就导致旧的路径(/items/1234)还在被使用 l.origin.replace(l.origin, pathArray[1])这行逻辑完全错了——你把整个origin(比如https://mywebiste.com)替换成了node,这就导致拼接出来的开头变成了node,再加上原始pathname和/edit,自然就出现了重复的路径部分
修正后的代码
直接调整逻辑,修改数组后重新生成完整路径:
const l = location; const str2 = '/edit'; const pathArray = l.pathname.split('/'); // 替换第二级路径为node pathArray[1] = 'node'; // 用修改后的数组重新生成pathname,注意join的时候要保留开头的/ const newPathname = pathArray.join('/'); // 拼接完整URL:origin + 新pathname + edit l.href = `${l.origin}${newPathname}${str2}`;
验证一下
对于原始URL https://mywebiste.com/items/1234:
pathArray拆分后是["", "items", "1234"]- 修改后变成
["", "node", "1234"] join('/')得到/node/1234- 最终拼接成
https://mywebiste.com/node/1234/edit,完全符合你的预期
另外,建议用const替代var,避免变量意外提升的问题,代码也更规范~
内容的提问来源于stack exchange,提问作者user1533064
相关产品推荐
相关产品推荐

