我想学习如何在 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");
}
<小时/>
<小时/>
<小时/>
鉴于您的示例页面,您的用户脚本应该有效。如果没有,则意味着您忽略或更改了问题中的关键细节!
错误控制台(CtrlShiftJ)中出现什么错误?
在 Firefox 或 Firebug 控制台中运行以下代码时会发生什么?
console.log (x300); console.log (countdown);
目标页面的 URL 是什么,以便我们可以看到到底发生了什么?
关于javascript - 如何使用 Greasemonkey 绕过 javascript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15447263/