javascript - 如何使用 Greasemonkey 绕过 javascript 函数?

标签 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()

但是没有成功:(

最佳答案

更新:

基于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. 错误控制台(CtrlShiftJ)中出现什么错误?

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

    console.log (x300);
    console.log (countdown);
    
  3. 目标页面的 URL 是什么,以便我们可以看到到底发生了什么?

关于javascript - 如何使用 Greasemonkey 绕过 javascript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15447263/

相关文章:

javascript - Greasemonkey 脚本无法运行但没有显示错误?

jquery - 使用 jQuery 重新排序 SELECT 列表中的选项

javascript - 为什么全局let变量没有添加到浏览器的window对象中?

javascript - 仅使用 javascript 提示用户至少选择一个复选框

javascript - Angular 平移显示键

javascript - 如何在没有_空白页的情况下在新窗口中打开链接?

jquery - 使用 jQuery 检索按钮值

javascript - 隐藏文本并添加一个按钮以使其显示

javascript - 如何从 Greasemonkey 脚本创建 Firefox 插件?

javascript - ajax动态加载js文件