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に出すだけ。
参考URL
2016/02/28(日)働クリッカーをやってみた
働クリッカーをやってみた
- 働クリッカー - zeny.io
一週間くらい前に働クリッカーで遊んでてtwitterに最速クリアタイム載せたりしてたのですが、クリアタイムが環境依存でそれだけ見てもよく分からないので、ソースコードを載せてみます。
そのうち解説/攻略みたいなの書くかも?
全実績解除
最初は資格とプログラミングをバランス良く買う。170msくらいだった。
(function(g){
var purchase = g.purchase;
var work = g.work;
var i,j,k;
start();
//働きつつ資格とプログラミングを買う
for(i=27;i;i--){
for(j=124;j;j--){
for(k=8;k;k--){
work();
}
purchase(0);
}
for(k=107;k;k--){
work();
}
purchase(4);
}
//働きつつプログラミングを99まで買う
var work_num = 90;
for(i=73;i;i--){
for(j=work_num;j;j--){
work();
}
purchase(4);
work_num+=3;
}
//働いて一億+残りの買い物の費用を稼ぐ
for(i=25285;i;i--){
work();
}
//買い物する
for(i=99;i;i--){
purchase(3);
purchase(2);
purchase(1);
}
purchase(1);
})(this);
全実績解除その2
最初は資格だけを買う。170msくらいだった。こっちでも大して速さ変わらないという(^_^;)
(function(g){
var purchase = g.purchase;
var work = g.work;
var i,j,k;
start();
//働きつつ資格を買う
for(i=3600;i;i--){
for(k=8;k;k--){
work();
}
purchase(0);
}
//働きつつプログラミングを99まで買う
var work_num = 30;
for(i=154;i;i--){
for(j=work_num;j;j--){
work();
}
purchase(4);
work_num+=1;
}
//働いて一億+残りの買い物の費用を稼ぐ
for(i=24550;i;i--){
work();
}
//買い物する
for(i=99;i;i--){
purchase(3);
purchase(2);
purchase(1);
}
purchase(1);
})(this);
ゲームクリアのみ
ゲームクリア(一億円達成)のみ。120msくらい。
(function(g){
var purchase = g.purchase;
var work = g.work;
var i,j,k;
start();
//働きつつ資格とプログラミングを買う
for(i=22;i;i--){
for(j=124;j;j--){
for(k=8;k;k--){
work();
}
purchase(0);
}
for(k=120;k;k--){
work();
}
purchase(4);
}
//働いて一億稼ぐ
for(i=21287;i;i--){
work();
}
})(this);
2008/12/18(木)Safariでの動作不良修正
ECO SimがSafariで動作するように
Safariのデバッガの使い方が分かったのでECO SimをSafariで動くように修正しました。
原因は、以下のようにstatusという変数名を使用していたことだったようです。なので全部別名に置換しました。まさかこんな理由で動かなかったとは…。
var status = {}; //Safariでは window.status = {}.toString(); と同じ扱いになる?
他のブラウザでは window.status へオブジェクトの代入が可能だったり、window.status とは独立した変数statusが確保されたりしていたので、正常動作していたようです。どの挙動が正しいんでしょうね?
IE7のcolspanを使ったtableの描画がおかしい
<table border="1"> <tr> <td colspan="3">1111111111</td> </tr> <tr> <td colspan="2">2222222222</td> <td>3</td> </tr> </table>
上のようなtableを作ると、IE7では3が入っているセルの幅が異常に大きくなります。調べてみたもののcolspanを使わない以外の解決法は見つからず。
この問題のせいで「ST初期化」ボタンを単独のセルに入れることができなくなってしまいました(-_-)
2008/11/08(土)IEの JavaScriptバグ
IEの JavaScriptバグ
IEでJavaScriptを使ってリンク先を変更すると、なぜかアンカーテキストまで変更されてしまうという問題が発生。いろいろ試してみると、どうやらアンカーテキストに@(アットマーク)が含まれているとこうなってしまうらしい。
そこで調べてみると同じ事例がいくつか見つかったけど、回避策はアンカーテキストを退避しておいてリンク先変更後に元に戻すことらしい。う~ん、やっぱりそれしかないのかなあ。
しかし、いったいどうしてこんな変なバグができるのだろう(-_-;)
参考
2008/10/12(日)ステータス上昇早見表更新
ステータス上昇早見表の動作速度改善
ステータス上昇早見表を久しぶりに更新しました。といっても動作はそのままで速度の改善だけです。文字列連結をArray.pushとArray.joinに置き換えただけなのですが、IEでの処理速度がかなり改善されました。
参考
- JavaScript の文字列の結合を最適化する
- IEって文字列連結がやたら遅いのね……。