Greasemonkey js再次进入子页面并再次等待

时间:2015-09-12 20:41:08

标签: javascript location href

抱歉英语不好,也许还有新问题。 我想编写自动制作脚本的脚本(在网页游戏中),我需要的一切是去子页面,然后是下一页,等等。然后脚本需要等待特定时间并重复。 我正在使用全局变量(布尔值),如果它是真的,我正在尝试做类似的事情:

unsafeWindow.location.href = linktodo + linkequipeq + accesKey;
unsafeWindow.location.href = linktodo + linkjednoraz + accesKey;

脚本首先跳到页面。使用setTimeout没有帮助。我正在使用:

// @run-at document-end

仍然没有工作,我尝试使用addEventListener wit parametr'load'但没有(我想我需要通过关闭窗口来“清理”eventlistener? - 尝试在第一次函数/窗口重定向完成后使用removeEventListener,失败)

是否可以在不打开和关闭新标签/弹出窗口的情况下执行此操作? 这样的脚本会在非活动选项卡中运行吗? 有人可以发布一些做它或教程的例子我会单独学习吗?

P.S 对于一些解释,这些子页面将填充一些设备,然后获得一些现金并去寻求。 linktodo是主机名,linkequipeq是路径名,而accessKey是在网页中构建的一个secuirty,在重新加载后没有做任何事情(我使用unsafeWindow通过GM访问它)。

可能有人理解我:D

// @include     "site"
// @grant       GM_addStyle
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_deleteValue
// @grant       GM_listValues
// @grant       GM_xmlhttpRequest 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @run-at document-end
var wypki = 0;
var cash = 0;
var czas = 0;
var autowypki = false;

var linkwypki = '?a=q';
var linksklep = '?a=town=';
var linkequipeq = '?a=equip';
var linkjednoraz = '?a=buyone';
var linkrealm;
var accesKey = unsafeWindow.accessKey;
var numbercash = document.getElementsByClassName('cash')[0].getElementsByClassName('panel');
var mynumbercash = numbercash[0];
var cash1 = (mynumbercash.innerHTML);
cash = cash1.slice(28, cash1.indexOf('PLN'));
cash = parseInt(cash.replace(/\s+/g, ''));

var linktodo = link.slice(0, link.indexOf('?a='));

function doquest() {
    'use strict';
    unsafeWindow.location.href = linktodo + linkwypki;
    setTimeout(function () {
        unsafeWindow.getElementById('start')[0].click();
    }, 2000);

}
function zlomek() {
    'use strict';

    if (cash < 20000) {
        unsafeWindow.location.href = linktodo + linksklep + accesKey;
    }
}
function jednoraz() {
    'use strict';
    if (autowypki === true && cash > 20000) {
        unsafeWindow.location.href = linktodo + linkjednoraz + accesKey;
    }
}
function equip() {
    'use strict';
    unsafeWindow.location.href = linktodo + linkequipeq + accesKey;
}
/* --- Main ----*/
function autoQuest() {
    'use strict';
    autowypki = true;
    equip();
    setTimeout(jednoraz(),5000);
}
/* --- Main ----*/

if (a === linkwypki) {
    var przyciskwypki = document.getElementsByTagName("form")[0].getElementsByTagName('div')[13];
    przyciskwypki.innerHTML =  przyciskwypki.innerHTML + '<input class="button" type="button" style="height: 20px; width: 110px;" id="autowypki"  value=" Robimy wypki"  />';
}
document.getElementById("autowypki").addEventListener("click", autoQuest, false);

1 个答案:

答案 0 :(得分:0)

Greasemonkey脚本与普通脚本完全相同,除非页面已加载,否则它们不会运行

在加载此脚本的任何页面上,此脚本将向具有ID='autowypki'

的元素添加单击事件侦听器

当该事件被触发时,脚本会将页面设置为linktodo + linkequipeq + accesKey中的equip

这就是所有这个脚本都会做的

无处调用函数doquestzlomak,所以他们只是在这个脚本中骑行

函数jednoraz设置为在超时5秒后调用,但到那时equip已经加载了一个新页面,因此,jednoraz实际上不会被调用为页面它已开启不再加载

但是,如果在equip加载的页面中触发了相同的点击事件,则可能会调用 jednoraz - 然后页面linktodo + linkjednoraz + accesKey将被加载...我也许说,因为我不能100%确定如果它有效地将页面设置为当前页面,equip将执行什么功能 - 即如果这会导致页面加载,那么{{1不会被调用,因为超时可能永远不会在页面重新加载时触发