1

ページ内の変数を変更したり、遅延機能をバイパスしたりするスクリプトを Greasemonkey で作成する方法を学びたいです。

ページの中央にあるスクリプトは次のとおりです。

<script language="Javascript">
    x300=100;

    function countdown() {
        x300--;
        if (x300 == 0) {
            document.getElementById('countdown').innerHTML =
                '<strong>Proceed to URL - <a href="http://XXXX.com/11123324">click here</a>!</strong>';
        }
        if (x300 > 0) {
            document.getElementById('countdown').innerHTML =
                'You will be redirected in ' + x300 + ' seconds.';
            setTimeout('countdown()',100000);
        }
    }

    countdown();
</script>


もちろん、にリダイレクトするスクリプトを実行したいのですがhttp://XXXX.com/11123324、私はまだ初心者なので、作成した最高のスクリプトは次のとおりです。

// ==UserScript==
// @name        aaa
// @include     bbbb
// @grant       none
// ==/UserScript==

x300=1;
countdown()

しかし、うまくいきませんでした:(

4

1 に答える 1

1

アップデート:

元の質問 (現在は削除されています)と明らかなターゲット ページに基づいて、変数x300と関数countdown() グローバルです。しかし、変数名x300は実際にはページごとに変わります。これは、スクリプト作成には適していないことを意味します。

ただし、関数名countdown()は一定のようです。したがって、正規表現を使用して関数ソースから目的のリンクを抽出できます。

// ==UserScript==
// @name        aaa
// @include     bbbb
// @grant       none
// ==/UserScript==

var addrFound       = false;
var cntDwnFuncSrc   = window.countdown;  // Use unsafeWindow if grant is not none.
if (cntDwnFuncSrc) {
    cntDwnFuncSrc           = countdown.toString ();
    var payloadAddrMatch    = cntDwnFuncSrc.match (/href="([^"]+?)"/);
    if (payloadAddrMatch  &&  payloadAddrMatch.length > 1) {
        location.assign (payloadAddrMatch[1]);
        addrFound           = true;
    }
}

if ( ! addrFound) {
    alert ("Payload address not found.  Site probably changed");
}



サンプル ページを考えると、ユーザー スクリプトは機能しているはずです。 そうでないということは、質問の重要な詳細を省略または変更していることを意味します。

  1. エラー コンソール ( CtrlShiftJ) にはどのようなエラーが表示されますか?

  2. Firefox または Firebug コンソールで次のコードを実行するとどうなりますか?

    console.log (x300);
    console.log (countdown);
    
  3. 実際に何が起こっているかを確認できるように、ターゲット ページの URL は何ですか?

于 2013-03-16T09:08:05.147 に答える