2023/04/22(土)[Tampermonkey] fetch responseの割り込み取得
[Tampermonkey] fetch responseの横取り取得
Webページがfetchで動的に取得したJSONデータを観測する手段は無いかなと思って見つけた方法。
ソースコード
// ==UserScript==
// @name Test intercept fetch
// @description Test intercept fetch
// @namespace Test
// @version 1.0
// @match https://example.com/*
// @run-at document-start
// @grant unsafeWindow
// ==/UserScript==
const proc_fetch_resp = (data, url) => {
console.log("proc_fetch_resp:" + url, data);
}
//=====================================================
// Intercept fetch
//=====================================================
const origFetch = unsafeWindow.fetch;
//元のfetchを差し替え
unsafeWindow.fetch = async (...args) => {
console.log("fetch called with args:", args);
const response = await origFetch(...args);
//レスポンスをクローンして使う
response
.clone()
.json()
.then(body => {
proc_fetch_resp(body, response.url);
})
.catch(err => console.error(err))
;
//元のレスポンスを返す
return response;
}
- @match は対象サイトのURLを指定
- @run-at は割り込みたいfetchよりに先にfetch差し替えができるように指定
- unsafeWindow を使わないとfetch差し替えができない
- サンプルなのでレスポンスをJSONとして読み取ってconsole.logに出すだけ。