我想学习如何在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()
但它不起作用:(
答案 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");
}
根据您的示例页面,您的用户应该有效。它没有,意味着您在省略或更改问题中的关键细节!
您在错误控制台中遇到了哪些错误( Ctrl Shift J )? < / p>
在Firefox或Firebug控制台中运行以下代码会发生什么?
console.log (x300);
console.log (countdown);
目标网页的网址是什么,以便我们可以看到实际发生的情况?