javascript - 处理 Chrome 中 secret 更改的 API

标签 javascript google-chrome google-chrome-extension internationalization chinese-locale

我制作了一个 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/

相关文章:

javascript - 识别 Chrome 扩展程序中的特定网站

javascript - Chrome 扩展在加载同步数据后运行 Angular

javascript - chrome.idle 在 chrome 扩展中未定义

javascript - 调整图像大小的 jQuery UI slider

javascript - Chart.js 饼图未显示在 Google Chrome Canvas 中

javascript - Chrome 显示网页来源而不是应用程序布局。

google-chrome - 如何使用 webdriver 和 Chrome 在本地主机上可靠地设置 cookie?

javascript - 无法访问 angularjs 工厂属性

javascript - 这是什么类型的 Javascript 函数?

javascript - JavaScript 中的结构类型检查