Greasemonkey js转到子页面,一次又一次地等待

Greasemonkey js going to subpage, again, again and wait

本文关键字:一次又一次 等待 js Greasemonkey      更新时间:2023-09-26

很抱歉我的英语不好,可能是新问题。我想写脚本,使一些自动(在网页游戏),我所需要的一切是去子页面,然后下一个,和其他。然后脚本需要等待特定的时间并重复。我使用全局变量(布尔值)如果它为真,我将尝试这样做:

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

脚本跳过第一个页面。使用setTimeout没有帮助。我使用:

// @run-at document-end

仍然不工作,我试图使用addEventListener参数'load',但没有什么(我认为我需要通过关闭窗口来"清洁"eventlistener ?-尝试在第一个函数/窗口重定向完成后使用removeEventListener,失败)。

是否可以做到这一点,而不打开和关闭新的选项卡/弹出窗口?像这样的脚本在非活动选项卡中工作吗?谁能发一些例子或者教程让我自己学习?

设置对于一些解释,这些子页面将填充一些装备,然后获得一些现金和去任务。linktodo是主机名,linkequipeq是路径名,accesKey是网页中内置的一些安全措施,在重新加载后不做某事(我通过GM使用unsafeWindow访问它)。

也许有人能理解我: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);

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

在该脚本被注入加载的任何页面上,该脚本将为带有ID='autowypki'

的元素添加一个click事件侦听器。

当触发该事件时,脚本将在函数equip

中将页面设置为linktodo + linkequipeq + accesKey

这就是这个脚本要做的所有事情

没有地方调用函数doquestzlomak,所以它们只是在这个脚本

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

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