如何使tampermonkey /嵌入式js用户脚本在运行之前等待?

时间:2020-10-02 19:54:27

标签: javascript html tampermonkey

如果有人遇到类似问题,那么对我来说,解决方案是在执行操作之前正确设置设置超时格式 setTimeout(function(){// program here},5000),但不起作用,命名该函数,然后从settimeout正确调用它不会引起任何问题。另外,请确保文件的底部没有一些随机括号,否则我的文件会引起问题。

我目前正在尝试改进在线虚拟学校计划的mod菜单/作弊方法。它可以正常工作并通过附加到虚拟学校页面上的几个不同区域来构建其UI元素,但是,每次运行时,它都会多次失败,然后才能成功,因为它试图将其附加到尚未加载的对象上。

.js文件是由this tool注入的,尽管我真的不知道它在做什么。我看不到“运行前延迟”等任何选项。

如何等待一定时间或检查网站是否已加载而不中断其加载过程?到目前为止,我尝试过的所有解决方案(settimeout,用于加载的事件监听器,而未加载网站的循环)均无效,因为它们在检查时停止了网站的加载。

这是JS文件的开始(它将不在此处运行)

(function() {
    'use strict';

    //==BEGIN UI BUILDING==
    window.configElements = []; //Config infomation
    function init() {


        //Builder Functionsfunction appender(b, p){ //appends things, if p is null defaults to tweaksmenu
            if (p == undefined) {
                document.getElementById("tweaksmenu").appendChild(b)
            } else document.getElementById(p).appendChild(b)

        }

        function RenderPane(name, id, width, height, margintop, marginleft) { //renders panes
            window.pane = document.createElement("div")
            window.pane.style.width = width
            window.pane.style.height = height
            window.pane.style.position = "absolute"
            window.pane.style.marginTop = margintop
            window.pane.style.marginLeft = marginleft
            window.pane.style.border = "1px solid rgb(95, 95, 95)"
            window.pane.style.borderRadius = "3px"
            window.pane.style.backgroundColor = "rgb(39, 39, 39)"
            window.pane.style.overflow = "hidden"
            window.pane.style.color = "rgb(249, 166, 25)"
            window.pane.style.textAlign = "center"
            window.pane.style.overflowY = "scroll"
            window.pane.id = id
            window.panetitle = document.createElement("h1")
            window.panetitle.innerText = " " + name //shitty centering fix
            window.pane.appendChild(window.panetitle)
            window.pane.appendChild(document.createElement("hr"))
            document.getElementById("overlay").appendChild(window.pane)
        }

        function BuildMenuEntry (name, info, id, configpane, override) { //Creates tickbox element with info and optional (new) config pane (see guesspractice). Override autoappends to tweaksmenu and does not return
            window.entry = document.createElement("div")
            window.tickbox = document.createElement("input")
            window.tickbox.type = "checkbox"
            window.tickbox.id = id
            window.configElements.push(id)
            window.entry.appendChild(window.tickbox)
            window.window.label = document.createElement("label")
            window.label.innerText = " " + name //spacing fix
            window.entry.appendChild(window.label)
            if (configpane != undefined) { //If any configpane was passed through try and create a button to attach it.
                window.configbutton = document.createElement("button")
                window.configbutton.innerText = "Configure"
                window.configbutton.style.marginLeft = "7px"
                window.configbutton.style.border = "1px solid #5f5f5f"
                window.configbutton.style.boxShadow = "inset 0 0 5px rgba(0, 0, 0, 0.6)"
                window.configbutton.style.backgroundColor = "rgb(39, 39, 39)"
                window.configbutton.style.color = "#f9a619"
                window.configbutton.style.borderRadius = "3px"
                window.configbutton.onclick = function () {
                    if (document.getElementById(configpane).style.visibility == "unset") { //visiblitly handler for configpane button
                        document.getElementById(configpane).style.visibility = "hidden"
                    } else {
                        document.getElementById(configpane).style.visibility = "unset"
                    }
                }
                window.entry.appendChild(window.configbutton)
            }
            window.desc = document.createElement("p")
            window.desc.innerHTML = info;
            window.entry.appendChild(window.desc)
            if (override == 1) { //override
                window.document.getElementById("tweaksmenu").appendChild(window.entry);
            }
            else return window.entry;
        }

0 个答案:

没有答案