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

Eup*_*phe 8 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();
}
Run Code Online (Sandbox Code Playgroud)

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

Nit*_*Nit 12

Tampermonkey脚本在单独的范围内运行.这意味着要使全局可用的功能,您需要执行以下操作:

window.updateGUI = function () {...}
Run Code Online (Sandbox Code Playgroud)

如果要向全局范围添加许多函数,最好将它们存储在单个对象下并通过那里解决您的函数.这有助于避免您可能遇到的任何可能的冲突.

var myFunctions = window.myFunctions = {};
myFunctions.updateGUI = function () {...};
Run Code Online (Sandbox Code Playgroud)

之后你可以简单地打电话myFunctions.updateGUI();.


Jus*_*ner 8

更好的方法是授予unsafeWindow.

// @grant       unsafeWindow
Run Code Online (Sandbox Code Playgroud)

然后像这样创建你的函数:

function test()
{
    console.log("test");
}
Run Code Online (Sandbox Code Playgroud)

但也可以通过以下方式在控制台中使用它unsafeWindow

if(!unsafeWindow.test)
{
    unsafeWindow.test = test;
}
Run Code Online (Sandbox Code Playgroud)

然后就可以test在控制台访问了。

  • 在 TamperMonkey 中,脚本在与页面自己的 Javascript 相同的上下文中运行。因此`unsafeWindow`与`window`是完全相同的对象。它的存在只是为了与真正的用户脚本(由浏览器处理的脚本)兼容。 (2认同)