如何使用Greasemonkey检测页面中特定链接的点击次数?

时间:2012-09-10 10:23:14

标签: javascript hyperlink click greasemonkey

好吧......我的一个虚拟宠物网站已关闭,所以我决定为另一个网站调整一个Greasemonkey脚本......当你找到一个鸡蛋时,原始脚本会弹出一个警告,所以你不要点击它 - 我觉得算上我遇到的蛋数很简单。 2个小时后,我终于找到了一种方法来保持变量过去的页面重新加载 - 成功!!然后我决定要跟踪我正在采取多少“步骤”... ARGGGG !!!!应该简单但不是!
在页面上有三个可能的探索链接点击(显示图像不链接)。 3小时后,我找到了事件监听器,并且当我点击页面上的任何位置时可以弹出警报,但是如何仅检查这3个链接中的1个点击?所有3个链接都具有相同的通用格式:http://unicreatures.com/explore.php?area=***&id=***&key=****其中*可更改。

目标网页http://unicreatures.com/explore.php?area=grassland应该无需帐户即可访问,如果不让我知道,我会抓取源代码。

// ==UserScript==
// @name Unicreatures Egg pop-up
// @namespace Unicreatures Egg pop-up
// @description Unicreatures Egg pop-up
// @include http://unicreatures.com/explore.php*
// @include http://www.unicreatures.com/explore.php*
// ==/UserScript==

var y = document.body.innerHTML;

//document.addEventListener('click', function(){alert('page clicked')}, true);

if(y.indexOf("You find a Noble")> 0)
{
alert('Noble Egg Alert');
}

if(y.indexOf("You find an Exalted")> 0)
{
localStorage.exaltedEggCount=Number(localStorage.exaltedEggCount)+1;
alert('Exalted Egg Alert '+localStorage.exaltedEggCount);
}

if(y.indexOf("egg nearby!")> 0)
{
localStorage.eggCount=Number(localStorage.eggCount)+1;

alert('Egg Alert '+localStorage.eggCount);
}

我确实意识到if语句的编写方式,如果前两个触发器中的任何一个(我没有写那个部分,只是使警报唯一)我得到双重警报......我很好目前。我确实读过一些关于获取元素id或者其他东西的东西,但我找不到它在任何地方解释得足以让我“得到” 请仅限javascript,没有jquery ...我现在仍然没有得到javascript ...请解释答案,这样我就能理解一些有用的东西 - 我不仅仅想要代码片段让我回到类似的问题,因为我不明白为什么要使用一些代码。

另外一个问题,除非我应该为它打开另一个问题......当你找到一个鸡蛋时,文字说You find an Exalted *** egg nearbyYou find a *** egg nearby。有没有办法从页面中抓取***部分?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将事件处理程序添加到页面上的特定元素。如果元素具有id属性,则很容易:

var element = document.getElementById( 'whatever' );

element.addEventListener( 'click', function () {
    alert( 'element clicked' );
}, true );

这会将事件监听器添加到ID为“whatever”的元素。

如果元素没有ID属性,则需要更具创意。这是一种方法:

var links = document.getElementsByTagName( 'a' );

for ( var i = 0; i < links.length; i++ ) {
    var link = links[i];
    if ( /area=grassland/.test( link.href ) ) {
        link.addEventListener( 'click', function () {
             alert( 'grassland link clicked' );
        }, true );
    }
}

/area=grassland/regexp,它将包含“area = grassland”的字符串作为子字符串进行匹配。 (如果需要,您可以do a lot more with regexps。)我们针对页面上的每个链接(a元素)对其进行测试,并将点击处理程序添加到href属性与正则表达式匹配的那些。< / p>

根据需要,您可以在link.textContent的链接中获取文字,如果您愿意与之匹配。但是,对于图像链接,它不会很好地工作。 (但是你可以随时找到link.getElementsByTagName( 'img' )[0]链接中的第一个图片标记并从那里开始工作。)


关于你的第二个问题,regexps也是你的朋友:

var regexp = /You find an? (Exalted )?(.*?) egg nearby/;
var match = regexp.exec( document.body.textContent );
if ( match ) {
    if ( match[1] ) {
        alert( "Exalted egg found: " + match[2] );
    } else {
        alert( "Normal egg found: " + match[2] );
    }
}

请参阅我上面给出的链接,了解正则表达式的工作原理以及如何修改它以更好地满足您的需求。

(Ps。警告:我实际上没有测试上面的任何代码,因为我不想在游戏网站上为此创建试用帐户。我希望它是正确的,但可能存在错误或错字。)