背景

URLSearchParmas API 为 URL 的查询字符串(query string)提供了方便操作的接口,管理端的项目大多都应用了该接口,但这个 API 因为部分浏览器没有实现(如 IE 和旧版 Edge,详见),所以引入了相应的 polyfill(github.com/WebReflection/url-search-params )进行支持,npm 包名为 url-search-params

URLSearchParams 的使用方式使用详见这里。

存在问题

随着2018年4月 windows 10 系统的更新发布,Edge 浏览器的排版引擎升级到了17,开始支持 URLSearchParams API。但是由于存在一些 bug,而且引入的 polyfill 也没有发现并进行处理,所以导致管理端的项目在 Edge 浏览器上请求时,在一定条件下会出现参数错误,最后导致请求失败。

如何复现

当请求参数中,但参数值同时出现“&”符号和“ ”空格时,URLSearchParamstoString() 方法就会出问题。

举个例子,下面是一个参数 q ,值为 a & b ,预期“ ”转为“+”,“&”转为"%26" :

const params = new URLSearchParams({q: 'a & b'});
params.toString();
// 期望返回“q=a+%26+b”,Edge 17浏览器则返回了“q=a+&+b”

从上面结果可以看出,Edge 17没有成功转义“&”符,由于这个字符是用于分割参数的,这样原本只有一个参数 q='a & b' ,但是由于没有成功转义”&“,就变成 q='a '' b'='' (注意 b 前面有一个空格)两个参数了,改变了原本的请求参数。

如何解决

解决方法

Plan A

原有 polyfill 的 GitHub 代码内没有对一些实现不规范的 URLSearchParams API 进行替换处理,解决改问题需要在模块引入前先清掉浏览器的 API( window.URLSearchParams 设为 undefined ),模块引入时就会赋予一个代码实现的 API。

原本打算在沿用旧有的 polyfill 上,不改变旧的 npm 包,应用上述方法进行修复。但是要在引用 polyfill 之前插入一段代码判断,会增加了代码耦合,所以放弃了。还有一种是直接在原有的 polyfill 代码上改,但由于该项目用 make 命令进行构建,对此不太熟悉,并且作者已将该项目转移到新的项目进行维护,构建方式也改了,最后就放弃了。

Plan B

原有 polyfill 由于已经转移到新的 Github 项目进行维护(github.com/ungap/url-search-params),构建也改为 npm 进行构建,npm 包名改为 @ungap/url-search-params,前面加了个 scope

在新的 polyfill 项目代码中,作者这次有对不规范的 URLSearchParams API 进行判断和替换,这样恰好也能在此添加 Edge 浏览器的判断。

于是就可以 fork 该项目代码修改和测试,然后给该项目提了个 pull request 给作者,很快作者就合并了代码,并发布了新的 npm 包。

然后,先把原来的 npm 包卸载,然后替换上新的 npm 包。

# 卸载
npm uninstall --save url-search-params
# 安装
npm install --save @ungap/url-search-params

最后,把模块引入的代码改下。

import URLSearchParams from 'url-search-params';
// 改为
import URLSearchParams from '@ungap/url-search-params';

最后

最近,微软官方宣布 Edge 浏览器将放弃 EdgeHTML 内核,将采用 Chromium 内核,前端开发纷纷期待新 Edge 到来。不过时间应该还长,而且用户升级也要时间,所以大家还是赶紧修复。

Edge 浏览器 URLSearchParams bug 修复相关推荐

  1. edge浏览器如何把网页放到桌面_edge浏览器怎么把网页放桌面 - 卡饭网

    win10 Edge浏览器怎么收藏网页到收藏夹并显示出来 win10 Edge浏览器怎么收藏网页到收藏夹并显示出来 win10 Edge浏览器怎么收藏网页到收藏夹并显示出来?自从安装了Win10正式版 ...

  2. java在浏览器闪退_Edge浏览器闪退怎么办,Edge浏览器闪退如何修复

    Win10系统自带的Edge浏览器有用户反映存在闪退问题,Edge浏览器的体验和流畅度方面还算不错,但对于很多Edge浏览器用户闪退问题是一个烦恼,那么Edge浏览器闪退怎么解决呢?这里小编提供一些方 ...

  3. Edge浏览器默认主页被莫名修改,修复流程分享

    目录 查看默认主页设置 默认主页修复 查看默认主页设置 打开浏览器,默认主页面为百度搜索 打开Egde浏览器的设置,查看开始.主页和新建标签页 按照设置每次打开Edge浏览器出现的应该是Edge自带的 ...

  4. Microsoft Edge浏览器下载文件乱码修复方法(二)

    之前有写过"Microsoft Edge浏览器下载文件乱码修复方法",发现很多情况下下载文件乱码问题还是存在,这里对之前内容做简单补充,希望可以帮到大家. 方法二: 默认如果提示下 ...

  5. Win10怎么样修复edge浏览器?如何重置edge浏览器

    在Windows10系统桌面右键点击左下角的开始按钮,在弹出的菜单中点击设置菜单项. Win10怎么样修复edge浏览器?如何重置edge浏览器[多图] 在打开的Windows设置窗口中,点击应用图标 ...

  6. 【网络修复-微软账号】windows系统微软账号无法登录、edge浏览器微软账号登录不了

    一.问题背景 windows系统微软账号无法登录.edge浏览器微软账号登录不了. 因为出BUG的时候我没有截图,所以这里就不放出问题图片了,大家都懂. 就是在右边橙色圈圈点击登录时,转一会就出错. ...

  7. 修复Edge浏览器无法登录微软账户问题

    问题描述 之前重装系统后默认的Edge浏览器需要重新登录微软账号,在账户密码正确的情况下,笔者无论登录多少次都无法登录成功.每次都会卡在请稍等的页面,如下图所示 原因 查阅网上的方案,大抵推测是登录无 ...

  8. 引起 Edge 浏览器远程代码漏洞的幕后黑手已出现!

    此前微软的 Edge 浏览器被曝光存在一个严重的漏洞,可使得黑客通过该漏洞获取用户的电脑权限,进而掌控系统.漏洞的编号被标记为 CVE-2018-8629,微软也在漏洞曝光不久后发布了紧急修复补丁. ...

  9. Windows11更新后打不开Edge浏览器解决办法

    前几天吐槽win11更新版本后打不开Microsoft Edge浏览器了,特别影响我使用,然后找网上方法,大多让去设置里 修复,就这样,然而没什么卵用,这应该是win11新版本的bug了. 后来看到b ...

最新文章

  1. 人工智能改变未来教育的5大方式!
  2. 重读经典:完全解析特征学习大杀器ResNet
  3. QIIME 2教程. 14数据评估和质控q2-quality-control(2021.2)
  4. i2c--insmod
  5. 使用Eclipse构建Maven项目 (step-by-step)
  6. 【渝粤教育】21秋期末考试财务管理10164k2
  7. java thread 多线程_java用Thread方式创建多线程
  8. python解析sql语句表名_python正则表达式匹配sql语句中的表名
  9. ALSA之PCM分析
  10. String.Format数字格式化参考
  11. MFC中资源视图中对话框大小和实际像素尺寸显示问题
  12. linux shell运用16进制计算
  13. 『 再看.NET7』看看required属性有什么不同
  14. ipsec 加密流程(一):ipsec策略匹配
  15. 每日一个CSS——模拟键盘
  16. Bootstrap简单网页制作
  17. 微信小程序界面设计小程序中的WXSS(css)选择器课程-::before伪元素
  18. STM32CubeMX | 32-使用硬件FMC驱动TFT-LCD屏幕(MCU屏)
  19. 小米战略入股TCL集团,不只是为了0.48%的股份
  20. Cisco思科交换机WS-C2960X-24TD-L使用ftp上传更新丢失IOS方法

热门文章

  1. Windows 服务监控工具
  2. nove6怎么升级鸿蒙系统,华为手机怎么升级鸿蒙,华为鸿蒙系统支持手机型号大全...
  3. ps -aux排序--按内存使用排序或按cpu使用排序
  4. js判断扑克牌同花顺
  5. Canvas如何实现樱花雨
  6. Hyper-V的虚拟化架构
  7. Excel表格转到Word中,保持表格不变形,不超边缘纸张范围
  8. 用PHP+MYSQL写一个完整的登录界面
  9. 推荐一个强大的开源的录制、直播软件(obs-studio)
  10. keepalived 多节点设置