我制作了一个 Chrome 扩展程序,最近 Chrome 的更新破坏了我的一些代码。我发现他们偷偷改变了.DateTimeFormat
的行为(感谢您让谷歌变得更加困难)。在更新到 Chrome 38 之前,此代码返回根据中国日历的当前年份的数字,即 31
(~公历中的 2014-2015 年):
Intl.DateTimeFormat("zh-TW-u-ca-chinese",{year:"numeric"}).format(new Date()); //31年
自 the Chinese numbering system ,第10位使用base-10,第1位使用base-12,将数字31转换为中文编号,使用以下代码:
var y = +Intl.DateTimeFormat("zh-TW-u-ca-chinese",{year:"numeric"}).format(date).match(/\d+/)[0],
天干 = ["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"], //base 10
地支 = ["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]; //base 12
y = 天干[(y-1)%10] + 地支[(y-1)%12]; //甲午
但现在,Chrome 不再返回数字,而是自动为我完成所有转换。现在返回的值只是 "甲午年"
,这破坏了我的代码,特别是这部分:
.match(/\d+/)[0]
我不能直接删除手动转换,因为并非每个用户都会使用最新版本的 Chrome。处理这种情况的好方法是什么?
最佳答案
在尝试转换之前简单测试返回值是否包含数字(或者相反,在尝试提取数字之前检查返回值是否看起来像有效的日期格式):
var y = +Intl.DateTimeFormat("zh-TW-u-ca-chinese",{year:"numeric"}).format(date);
if (/\d/.test(y)) {
y = y.match(/\d+/)[0];
var 天干 = ["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]; //base 10
var 地支 = ["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]; //base 12
y = 天干[(y-1)%10] + 地支[(y-1)%12]; //甲午
}
当您遇到无法通过这种方式检测到的问题时,您可以尝试确定是在哪个 Chrome 版本中引入了更改,并从 navigator.userAgent
中提取 Chrome 版本进行比较.
关于javascript - 处理 Chrome 中 secret 更改的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25704665/