でさまざまなことを追跡する Greasemonkey スクリプトがありますunicreatures.com
。
カウントしたかったことの 1 つは、ページ上の一部のリンクのクリック数でしたが、すべてのリンクではありませんでした。
これらは数える必要がある、
http://unicreatures.com/explore.php?area=sea&id=89&key=bf12
これらは数えるべきではない、
http://unicreatures.com/explore.php?area=sea&gather=5&enc=394844&r=
誰かが私が望んでいたことを行う正規表現を見つけ出すのを手伝ってくれましたが、それぞれの異なる探索場所 ( area=**
) をコーディングする必要があったため、それはうまくいかないと判断しました。
正規表現のバージョン
var links = document.getElementsByTagName( 'a' );
for ( var i = 0; i < links.length; i++ ) {
var link = links[i];
if ( /area=sea(?!\&gather)/.test( link.href )) {
link.addEventListener( 'click', function () {
localStorage.steps=Number(localStorage.steps)+1
// alert(localStorage.steps + ' in Sargasso' );
}, true );
}
}
明らかに、 のさまざまな値に対して 10 億の if ステートメントは必要ありませんarea=
。正規表現に変数を追加する方法が見つかりませんでした。
それで、最終的にいくつかの文字列操作コマンドを見つけて、これをまとめました:
var url = window.location.href;
var startOf=url.indexOf("=")+1;
var endOf=url.indexOf("&");
var loc =url.substring(startOf,endOf);
var links = document.getElementsByTagName( 'a' );
for ( var i = 0; i < links.length; i++ ) {
var link = links[i];
if (url.indexOf("area=")>=0 && url.indexOf("gather=")<0) {
link.addEventListener( 'click', function () {
localStorage.steps=Number(localStorage.steps)+1
localStorage[loc+"Steps"]=Number(localStorage[loc+"Steps"])+1
alert(localStorage[loc+"Steps"] +" in local"+loc);
}, true );
}
}
何らかの理由で、2 番目の条件が false の場合でもカウントされます。これはどこかで構文が間違っている単純なケースですか、それとも Greasemonkey のバグですか? コンソールにエラーは表示されません。