「Widget:Custom map」の版間の差分
提供:メタファー リファンタジオ 攻略Wiki
ヘイグ運営用アカウント (トーク | 投稿記録) 編集の要約なし |
ヘイグ運営用アカウント (トーク | 投稿記録) 編集の要約なし |
||
27行目: | 27行目: | ||
/////////////// | /////////////// | ||
// | // Wikiのクロスサイト影響をデバッグするためのツール | ||
window. | window.debugWikiURLSwitching = function() { | ||
console.group('=== | console.group('=== Wiki URL Switching Debug ==='); | ||
// | // 現在のWikiコンテキストを保存 | ||
const currentWikiContext = { | |||
baseURL: API_BASE_URL, | |||
path: window.location.pathname, | |||
timestamp: new Date().toISOString() | |||
}; | |||
// ローカルストレージのWiki関連データを確認 | |||
console.log('LocalStorage Wiki Data:'); | |||
Object.keys(localStorage).forEach(key => { | |||
if (key.includes('wiki') || key.includes('map') || | |||
key.includes('rs2r') || key.includes('mario') || | |||
key.includes('zelda') || key.includes('leaflet')) { | |||
console.log(`${key}:`, localStorage.getItem(key)); | |||
} | |||
}); | |||
// セッションストレージも確認 | |||
console.log('\nSessionStorage Wiki Data:'); | |||
Object.keys(sessionStorage).forEach(key => { | |||
if (key.includes('wiki') || key.includes('map') || | |||
key.includes('rs2r') || key.includes('mario') || | |||
key.includes('zelda') || key.includes('leaflet')) { | |||
console.log(`${key}:`, sessionStorage.getItem(key)); | |||
} | |||
}); | |||
// グローバル変数のチェック | |||
console.log('\nGlobal Variables Check:'); | |||
const relevantGlobals = ['API_BASE_URL', 'map', 'drawnItems', 'L']; | |||
relevantGlobals.forEach(varName => { | |||
if (window[varName]) { | |||
console.log(`${varName} exists:`, { | |||
type: typeof window[varName], | |||
value: varName === 'API_BASE_URL' ? window[varName] : '[Object]' | |||
}); | |||
} | |||
}); | |||
// Cookieもチェック | |||
console.log('\nRelevant Cookies:'); | |||
document.cookie.split(';').forEach(cookie => { | |||
if (cookie.includes('wiki') || cookie.includes('map') || | |||
cookie.includes('rs2r') || cookie.includes('mario') || | |||
cookie.includes('zelda')) { | |||
console.log('Cookie:', cookie.trim()); | |||
} | |||
}); | |||
// APIリクエストの監視を強化 | |||
const originalAjax = $.ajax; | const originalAjax = $.ajax; | ||
$.ajax = function(settings) { | $.ajax = function(settings) { | ||
const | // URLの変更を検出 | ||
const | const originalUrl = settings.url; | ||
const knownWikis = [ | |||
'rs2r', | |||
'mario_luigi_brothership', | |||
'zelda_eow', | |||
'metaphor_refantazio' | |||
]; | |||
// 意図しないWikiへのURLスイッチを検出 | |||
const detectedWiki = knownWikis.find(wiki => | |||
settings.url.includes(wiki) && !API_BASE_URL.includes(wiki) | |||
); | |||
if (detectedWiki) { | |||
console.warn('URL Switch Detected!', { | |||
intendedWiki: API_BASE_URL.split('/').pop(), | |||
console. | detectedWiki: detectedWiki, | ||
originalUrl: originalUrl, | |||
stack: new Error().stack | |||
}); | }); | ||
} | } | ||
return originalAjax.apply(this, arguments); | |||
return originalAjax.apply(this, arguments | |||
}; | }; | ||
// | // Leafletマップのクリーンアップ状態を確認 | ||
console.log('\nLeaflet State Check:'); | |||
window. | if (window.map) { | ||
console.log('Map instance exists'); | |||
console.log('Drawn items count:', drawnItems?.getLayers().length || 0); | |||
// マップのイベントリスナーを確認 | |||
const mapEvents = map._events; | |||
console.log('Map event listeners:', Object.keys(mapEvents)); | |||
} | |||
// 前回のマップ情報が残っていないか確認 | |||
if (window.previousMapState) { | |||
console.warn('Previous map state detected:', window.previousMapState); | |||
} | |||
// クリーンアップ関数の提供 | |||
window.cleanupMapState = function() { | |||
console.group('Cleaning up map state'); | |||
// マップインスタンスのクリーンアップ | |||
if (window.map) { | |||
map.remove(); | |||
window.map = null; | |||
} | } | ||
// drawnItemsのクリーンアップ | |||
if (window.drawnItems) { | |||
drawnItems.clearLayers(); | |||
window.drawnItems = null; | |||
} | } | ||
// Leaflet関連のグローバル変数をクリーンアップ | |||
['editControl', 'drawControl', 'iconDefinitions'].forEach(varName => { | |||
if (window[varName]) { | |||
window[varName] = null; | |||
} | |||
}); | }); | ||
// | // ローカルストレージの特定のアイテムをクリア | ||
Object.keys(localStorage).forEach(key => { | |||
if (key.includes('map') || key.includes('leaflet')) { | |||
localStorage.removeItem(key); | |||
} | |||
} | }); | ||
console.log('Map state cleaned up'); | |||
console. | console.groupEnd(); | ||
} | }; | ||
console.log('\nDebug tools installed. Use cleanupMapState() to reset map state.'); | |||
console.groupEnd(); | console.groupEnd(); | ||
}; | }; | ||
// | // URLの履歴を追跡 | ||
window. | window.trackURLHistory = function() { | ||
const urlHistory = sessionStorage.getItem('urlHistory') ? | |||
JSON.parse(sessionStorage.getItem('urlHistory')) : []; | |||
urlHistory.push({ | |||
timestamp: new Date().toISOString(), | |||
url: window.location.href, | |||
apiBaseUrl: API_BASE_URL | |||
}); | }); | ||
// 最新の10件のみ保持 | |||
if (urlHistory.length > 10) { | |||
urlHistory.shift(); | |||
} | |||
sessionStorage.setItem('urlHistory', JSON.stringify(urlHistory)); | |||
console.group('URL History'); | |||
urlHistory.forEach((entry, index) => { | |||
console.log(`${index + 1}:`, entry); | |||
}); | }); | ||
console.groupEnd(); | console.groupEnd(); |