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って文字列連結がやたら遅いのね……。