fix: move XHR interceptor to injectedJavaScriptBeforeContentLoaded

インターセプターをページスクリプトより前に実行されるよう修正。
injectedJavaScript(ページ読込後)からinjectedJavaScriptBeforeContentLoaded
(ページスクリプト実行前)へ移動することで、モックON時のページフリーズを解消。

- lib/webViewInjectjavascript.ts: injectJavascriptDataからインターセプターを分離、
  generateBeforeContentLoadedScript()を新規エクスポート
- stateBox/useTrainMenu.tsx: injectJavascriptBeforeContentLoadedを別途計算しコンテキストに追加
- components/Apps/WebView.tsx: injectedJavaScriptBeforeContentLoadedプロップを追加

Co-authored-by: Copilot <[email protected]>
This commit is contained in:
harukin-expo-dev-env
2026-04-30 16:50:55 +00:00
co-authored by Copilot
parent c31d35c099
commit 75fce29d74
3 changed files with 19 additions and 9 deletions
+10 -7
View File
@@ -38,12 +38,7 @@ export const injectJavascriptData = ({
useUnyohub,
useElesite,
isDark,
mockApiConfig = null,
}: InjectJavascriptOptions): string => {
// XHRインターセプターを先頭に注入(モックモード有効時)
const xhrInterceptor = mockApiConfig
? generateXhrInterceptorJs(mockApiConfig)
: '';
}: Omit<InjectJavascriptOptions, 'mockApiConfig'>): string => {
// 一番上のメニュー非表示 地図スイッチによって切り替え
const topMenu =
@@ -1405,7 +1400,6 @@ setStationMenuDialog.observe(document.querySelector('#disp'), {
`
: ``;
return (
xhrInterceptor +
bootData +
topMenu +
trainIcon +
@@ -1416,3 +1410,12 @@ setStationMenuDialog.observe(document.querySelector('#disp'), {
makeStationMenu
);
};
/**
* XHRインターセプターJSを生成する(injectedJavaScriptBeforeContentLoaded用)
* ページスクリプトより前に実行する必要があるため、別プロップで渡す。
*/
export const generateBeforeContentLoadedScript = (mockApiConfig: MockApiConfig | null): string => {
if (!mockApiConfig) return '';
return generateXhrInterceptorJs(mockApiConfig);
};