如何使用Greasemonkey绕过javascript函数?

时间:2013-03-16 08:35:30

标签: javascript jquery greasemonkey

我想学习如何在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()

但它不起作用:(

1 个答案:

答案 0 :(得分:1)

更新

基于the original question (now deleted)和明显的目标网页,变量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. 您在错误控制台中遇到了哪些错误( Ctrl Shift J )? < / p>

  2. 在Firefox或Firebug控制台中运行以下代码会发生什么?

    console.log (x300);
    console.log (countdown);
    
  3. 目标网页的网址是什么,以便我们可以看到实际发生的情况?