「Widget:Custom map」の版間の差分
提供:メタファー リファンタジオ 攻略Wiki
ヘイグ運営用アカウント (トーク | 投稿記録) 編集の要約なし |
ヘイグ運営用アカウント (トーク | 投稿記録) 編集の要約なし |
||
27行目: | 27行目: | ||
/////////////// | /////////////// | ||
// | // APIリクエストをトラッキングするデバッグ関数 | ||
window. | window.debugAPIRequests = function() { | ||
console.group('=== | console.group('=== API Request Tracking ==='); | ||
// | // オリジナルのjQuery ajaxメソッドを保存 | ||
const originalAjax = $.ajax; | |||
// ajaxリクエストをインターセプト | |||
$.ajax = function(settings) { | |||
const requestUrl = settings.url || ''; | |||
// | const requestData = settings.data || {}; | ||
console.group(`API Request to: ${requestUrl}`); | |||
console.log('Request details:', { | |||
fullUrl: requestUrl, | |||
baseUrl: API_BASE_URL, | |||
matchesBaseUrl: requestUrl.startsWith(API_BASE_URL), | |||
method: settings.type || 'GET', | |||
data: requestData | |||
}); | }); | ||
const | // URLの構成要素を分析 | ||
try { | |||
const url = new URL(requestUrl); | |||
console.log('URL analysis:', { | |||
protocol: url.protocol, | |||
hostname: url.hostname, | |||
pathname: url.pathname, | |||
search: url.search, | |||
expectedHostname: new URL(API_BASE_URL).hostname, | |||
hostnameMatches: url.hostname === new URL(API_BASE_URL).hostname | |||
console. | }); | ||
} catch (e) { | |||
console.error('URL parsing error:', e); | |||
} | |||
// | // スタックトレースを取得して呼び出し元を特定 | ||
const stack = new Error().stack; | |||
console.log('Called from:', stack); | |||
// リクエストの実行と結果のログ | |||
return originalAjax.apply(this, arguments) | |||
.then(function(response) { | |||
console.log('Response received:', { | |||
status: 'success', | |||
dataType: typeof response, | |||
hasData: !!response | |||
// | |||
console.log(' | |||
}); | }); | ||
console.groupEnd(); | |||
return response; | |||
}) | |||
console. | .catch(function(error) { | ||
console.error('Request failed:', { | |||
status: error.status, | |||
statusText: error.statusText, | |||
responseText: error.responseText | |||
}); | }); | ||
console.groupEnd(); | console.groupEnd(); | ||
throw error; | |||
}); | }); | ||
}; | |||
// XMLHttpRequestもモニタリング | |||
const originalXHR = window.XMLHttpRequest; | |||
window.XMLHttpRequest = function() { | |||
const xhr = new originalXHR(); | |||
const originalOpen = xhr.open; | |||
xhr.open = function(method, url) { | |||
console.group(`XMLHttpRequest to: ${url}`); | |||
console.log('XHR details:', { | |||
method: method, | |||
url: url, | |||
matchesBaseUrl: url.startsWith(API_BASE_URL) | |||
}); | |||
console.log('Called from:', new Error().stack); | |||
console.groupEnd(); | |||
return originalOpen.apply(this, arguments); | |||
} | }; | ||
return xhr; | |||
}; | |||
// API_BASE_URLの変更を監視 | |||
let originalAPIBaseURL = API_BASE_URL; | |||
Object.defineProperty(window, 'API_BASE_URL', { | |||
console. | get: function() { | ||
return originalAPIBaseURL; | |||
}, | |||
set: function(newValue) { | |||
console.warn('API_BASE_URL modification detected:', { | |||
oldValue: originalAPIBaseURL, | |||
newValue: newValue, | |||
stack: new Error().stack | |||
}); | }); | ||
originalAPIBaseURL = newValue; | |||
} | } | ||
}); | }); | ||
// グローバル変数の監視 | |||
console.log('Current global state:', { | |||
API_BASE_URL: window.API_BASE_URL, | |||
definedInWindow: 'API_BASE_URL' in window, | |||
configurable: Object.getOwnPropertyDescriptor(window, 'API_BASE_URL')?.configurable, | |||
enumerable: Object.getOwnPropertyDescriptor(window, 'API_BASE_URL')?.enumerable | |||
}); | |||
// APIリクエストのベースURLが変更される可能性のある箇所を検索 | |||
console.log('Searching for potential URL modifications...'); | |||
const scripts = document.getElementsByTagName('script'); | |||
for (let script of scripts) { | |||
if (script.src) { | |||
console.log('External script:', script.src); | |||
} | |||
} | |||
console.log('Debug tools installed. Monitoring API requests...'); | |||
console.groupEnd(); | |||
}; | |||
// リクエストURLの分析ヘルパー | |||
window.analyzeRequestURL = function(url) { | |||
console.group('URL Analysis'); | |||
try { | |||
const parsedUrl = new URL(url); | |||
console.log('URL components:', { | |||
full: url, | |||
protocol: parsedUrl.protocol, | |||
hostname: parsedUrl.hostname, | |||
pathname: parsedUrl.pathname, | |||
search: parsedUrl.search, | |||
expectedHostname: new URL(API_BASE_URL).hostname, | |||
isMatch: parsedUrl.hostname === new URL(API_BASE_URL).hostname | |||
}); | |||
// ドメインの比較 | |||
if (parsedUrl.hostname !== new URL(API_BASE_URL).hostname) { | |||
console.warn('Domain mismatch detected!'); | |||
console.log('Expected:', new URL(API_BASE_URL).hostname); | |||
console.log('Actual:', parsedUrl.hostname); | |||
} | |||
} catch (e) { | |||
console.error('URL parsing failed:', e); | |||
} | |||
console.groupEnd(); | |||
}; | |||
// 現在のページコンテキストの分析 | |||
window.analyzePageContext = function() { | |||
console.group('Page Context Analysis'); | |||
console.log('Document location:', { | |||
href: document.location.href, | |||
protocol: document.location.protocol, | |||
hostname: document.location.hostname, | |||
pathname: document.location.pathname | |||
}); | |||
console.log('Base URL elements:', { | |||
baseHref: document.querySelector('base')?.href, | |||
baseURI: document.baseURI, | |||
documentURI: document.documentURI | |||
}); | |||
console.log('MediaWiki specific:', { | |||
wgServer: window.mw?.config?.get('wgServer'), | |||
wgScriptPath: window.mw?.config?.get('wgScriptPath'), | |||
wgArticlePath: window.mw?.config?.get('wgArticlePath') | |||
}); | |||
console.groupEnd(); | console.groupEnd(); | ||
}; | }; |