1

わかりました...仮想ペット サイトの 1 つがダウンしたので、別のサイト用に Greasemonkey スクリプトを微調整することにしました...元のスクリプトは、卵を見つけたときに警告を表示するだけなので、卵をクリックしなくても済みます。出くわした卵の数を数えるのは簡単でしょう。2時間後、ページのリロード後も変数を保持する方法をついに見つけました-成功!! それから、自分が何回の「歩数」を取ったかを追跡したいと決めました... ARGGGG!!!! シンプルであるべきですが、そうではありません!
このページには、クリックできる探索リンクが 3 つあります (リンクではなく画像を示しています)。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);
}

最初の 2 つのトリガーのいずれかが発生した場合に二重のアラートが発生するという if ステートメントの記述方法を認識しています (その部分は記述していませんが、アラートを一意にしただけです)。今のところは問題ありません。要素IDの取得などについて何か読んだことがありますが、「取得」するのに十分な説明がどこにも見つかりませんでした。
javascriptのみ、jqueryは不可...現時点ではまだほとんどjavascriptを取得していません...何かがどのように機能するかを理解できるように回答を説明してください-同様の質問で戻ってくるコードスニペットが欲しくないだけです少しのコードが使用された理由がわかりません。

そして、別の質問を開く必要がない限り、もう1つの質問... 卵を見つけたとき、テキストにはYou find an Exalted *** egg nearbyまたはYou find a *** egg nearby. ページからパーツを取得する方法はあり***ますか?

ありがとう!

4

1 に答える 1

2

ページ上の特定の要素にイベント ハンドラーを追加できます。要素にid属性がある場合、これは簡単です。

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

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

これにより、ID「whatever」を持つ要素にイベント リスナーが追加されます。

要素に ID 属性がない場合は、もう少し工夫が必要です。これを行う1つの方法は次のとおりです。

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」を含む文字列に一致/area=grassland/する正規表現です。(必要に応じて、正規表現を使用してさらに多くのことを行うことができます。) ページ上のすべてのリンク (a要素)に対してテストし、href属性が正規表現に一致するものにクリック ハンドラーを追加します。

link.textContent必要に応じて、それと照合したい場合は、リンク内のテキストを で取得できます。ただし、画像リンクではうまく機能しません。(ただし、たとえば、リンク内の最初のイメージ タグをいつでも見つけて、link.getElementsByTagName( 'img' )[0]そこから作業することができます。)


2番目の質問については、正規表現もあなたの友達です:

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] );
    }
}

その正規表現がどのように機能するか、およびニーズに合わせて変更する方法については、上記のリンクを参照してください。

(追伸: 警告: 上記のコードを実際にテストしたわけではありません。そのためだけにゲーム サイトでトライアル アカウントを作成するのは気が進まなかったからです。正しいことを願っていますが、バグやタイプミスがある可能性があります。 .)

于 2012-09-10T10:44:27.723 に答える