脚本运行后如何在控制台中提供Tampermonkey添加的功能?

时间:2014-12-28 20:19:19

标签: javascript tampermonkey

我制作了一个脚本,其中包含一个函数:

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();
}

脚本在页面加载时运行很好,但是当我在脚本完成执行后尝试运行此函数时,它是“未定义”。
如何让它“保持”在当前范围内?

3 个答案:

答案 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);