我制作了一个脚本,其中包含一个函数:
function updateGUI(){
document.getElementById("cursoft").value = getSoftware();
document.getElementById("curver").value = getCurrentVersion();
document.getElementById("rcycles").value = getResearchCycles();
document.getElementById("rcycle").value = getCurrentCycle();
document.getElementById("curproc").value = getCurrentProcess();
document.getElementById("curact").value = getCurrentAction();
}
脚本在页面加载时运行很好,但是当我在脚本完成执行后尝试运行此函数时,它是“未定义”。
如何让它“保持”在当前范围内?
答案 0 :(得分:11)
Tampermonkey脚本在单独的范围内运行。这意味着要使全局可用的功能,您需要执行以下操作:
window.updateGUI = function () {...}
如果要向全局范围添加许多函数,最好将它们存储在单个对象下并通过那里解决您的功能。这有助于避免您可能遇到的任何可能的碰撞。
var myFunctions = window.myFunctions = {};
myFunctions.updateGUI = function () {...};
之后,您只需致电myFunctions.updateGUI();
。
答案 1 :(得分:1)
一种更好的方法是授予unsafeWindow
。
// @grant unsafeWindow
然后创建如下函数:
function test()
{
console.log("test");
}
但也可以通过unsafeWindow
在控制台中使用它:
if(!unsafeWindow.test)
{
unsafeWindow.test = test;
}
然后,您可以在控制台中访问test
。
答案 2 :(得分:0)
我找到了我的问题的答案,但尼特的答案更胜一筹。如果有人需要,我仍会发帖。
您可以通过将函数添加到脚本元素并将其附加到正文
来向全局范围添加函数var scriptElem = document.createElement('script');
scriptElem.innerHTML = 'function updateGui() { /* stuff */ }';
document.body.appendChild(scriptElem);