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(日)働クリッカーをやってみた

働クリッカーをやってみた

一週間くらい前に働クリッカーで遊んでて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での処理速度がかなり改善されました。

参考