解决支付宝 h5 页面白屏
公司新上线的 h5 项目, 使用 iphone 测试发现, 微信, safari 中能正常打开,
但是 支付宝 中一直是白屏状态.
显示错误信息
在项目中加上这段代码, 可以显示开发中的 runtime 错误, 参考
#2076
if (import.meta.env.DEV) {
// REGISTER ERROR OVERLAY
const showErrorOverlay = (err) => {
// must be within function call because that's when the element is defined for sure.
const ErrorOverlay = customElements.get("vite-error-overlay");
// don't open outside vite environment
if (!ErrorOverlay) return;
console.log(err);
const overlay = new ErrorOverlay(err);
document.body.appendChild(overlay);
};
window.addEventListener("error", showErrorOverlay);
window.addEventListener(
"unhandledrejection",
({ reason }) => showErrorOverlay(reason),
);
}
现在用 支付宝 打开页面 就可以看到错误信息了
undefined is not an object (evaluating 'request.signal.removeEventListener')

进一步确认该错误来自 react-router
loader,
lazy
错误分析
支付宝内置浏览器, 对 Request 做了自定义修改, 该自定义 Request 没有 signal
属性字段, 导致用到 request.signal 的 loader, lazy 方法报错
错误修复
使用 abortcontroller-polyfill
对 Request 进行修复
import "abortcontroller-polyfill/dist/polyfill-patch-fetch";
ps: 至于支付宝为何要自定义 Request, 这个问题我也想知道