项目上有需要用到 pjax 技术,故将所有涉及到 pjax 的代码放到了 pjax.js 中,其中一段代码如下:
$(window).on('popstate', (e) => {
if (!e?.state?.url) return;
var url = new URL(e.state.url);
onAddrChange(url.pathname);
});
e.state
和 e.state.url
均有可能不存在,故使用 ? 语法判断。
项目上线后,用户报告无法使用,用户浏览器为 Chrome 77,同一设备其他浏览器均正常,查看后发现 pjax 异常,在 pjax.js 文件尾部添加 alert('test')
无效,但若在头部则可以正常运行。
经过数十次测试后,最终决定将函数一个一个迁移至新 js 文件,最终发现问题:
Chrome 77 不支持 ? 语法。
总结:应该早点想到是语法问题。