真的是血泪教训啊,2022了,没想到还有人在用谷歌79版本...当然,这不是用户的问题,是我的问题😊
前几天半夜,正在静静刷手机,不知道过了多久,看到工作软件未读消息5+,我是个万事静音的人,除非别人@我,或者私聊才会有消息,小脑袋里满是问号,谁半夜找我呢?
点进去看,就是这样一个截图报错,功能用不了。。。
第一反应:不至于吧,这个功能上了这么久了,怎么可能报错呢。
然后就被啪啪打脸。
emmm,由于我看到消息已经过了一段时间,于是看到了用户的自力更生。
他说:“升级浏览器后好了。”
emmm,咱必须给这位用户点赞。
但是,我就开始思考了,也不是所有用户都有这样的自觉呀,而且强迫用户升级浏览器,这开发也太骄傲了吧,木秀于林,风必摧之。
于是,我就来解决这个问题。
问题原因
首先说下原因,replaceAll确实有兼容问题,谷歌只支持85及以上版本
解决方案
方案一:用无兼容问题的replace
replace虽无兼容问题,但无法替换所有,如果要替换所有,可以用正则/g
title = title.replace(/ /g, '_') // 把所有空格替换为下划线
此时,还有另一处,我要替换的是多个变量,直接用以上方案,无法替换,可以这样用
let string = '999${f}888${f}'
let key = '${f}'
let res = string.replace(new RegExp(key,'g'), 'abc')
console.log(res) // '999${f}888${f}'
但是!此时的替换并未生效
又用上我熟悉的搜索大法,才知道,原来替换变量时,变量要是正则表达式,因此完整的多个变量替换方案如下:
let string = '999${f}888${f}'
let key = '\\$\\{f\\}'
let res = string.replace(new RegExp(key,'g'), 'abc')
console.log(res) // 999abc888abc
方案二:改写replaceAll
其实就是当不支持replaceAll时,用replace替换
if(!String.prototype.replaceAll){
String.prototype.replaceAll = function (newString, oldString) {
return this.replace(new RegExp("oldString", "g"), "newString")
}
}
解决完毕,休息~