我有一个 Greasemonkey 脚本,可以跟踪unicreatures.com
.
我想计算的一件事是点击页面上的某些链接,但不是所有链接。
这些需要计算,
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 );
}
}
显然,我不想要十亿个 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 );
}
}
出于某种原因,即使第二个条件为假,它也很重要。这是我在某处出现语法错误的简单案例,还是Greasemonkey错误?我在控制台中没有任何错误。