记录移动返回栈同步失败

移动 WebView 返回栈注入脚本写入 history state 失败时记录日志

移动壳测试和配置检查拒绝返回栈脚本空 catch

共享决策日志补充移动返回栈同步失败边界
This commit is contained in:
2026-06-20 10:13:14 +08:00
parent 77a2bacb7a
commit 7c8ef52e86
4 changed files with 44 additions and 1 deletions
@@ -169,6 +169,32 @@ describe('TRACK_MOBILE_WEBVIEW_HISTORY_SCRIPT', () => {
);
});
test('路由栈状态写入失败时记录日志', () => {
const postMessage = vi.fn();
const syncError = new Error('history state blocked');
const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => undefined);
window.ReactNativeWebView = {
postMessage,
};
window.history.replaceState = vi.fn(() => {
throw syncError;
}) as typeof window.history.replaceState;
window.eval(TRACK_MOBILE_WEBVIEW_HISTORY_SCRIPT);
expect(warnSpy).toHaveBeenCalledWith(
'mobile navigation state sync failed',
syncError,
);
expect(postMessage).toHaveBeenCalledWith(
JSON.stringify({
type: 'genarrative.mobile.historyState',
canGoBack: false,
}),
);
warnSpy.mockRestore();
});
test('重复注入时回放当前 H5 路由栈状态', () => {
const postMessage = vi.fn();
window.ReactNativeWebView = {
+3 -1
View File
@@ -176,7 +176,9 @@ export const TRACK_MOBILE_WEBVIEW_HISTORY_SCRIPT = `
'',
window.location.href
);
} catch (error) {}
} catch (error) {
console.warn('mobile navigation state sync failed', error);
}
}
window.history.pushState = function(state, title, url) {