好吧......我的一个虚拟宠物网站已关闭,所以我决定为另一个网站调整一个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 nearby
或You find a *** egg nearby
。有没有办法从页面中抓取***
部分?
谢谢!
答案 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。警告:我实际上没有测试上面的任何代码,因为我不想在游戏网站上为此创建试用帐户。我希望它是正确的,但可能存在错误或错字。)