【问题标题】:How do I make functions added by Tampermonkey be available in console after the script has been ran?脚本运行后,如何使 Tampermonkey 添加的功能在控制台中可用?
【发布时间】:2015-02-25 03:06:21
【问题描述】:

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

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

脚本在页面加载时运行得很好,但是当我在脚本完成执行后尝试运行此函数时,它“未定义”。
我怎样才能让它“停留”在当前范围内?

【问题讨论】:

标签: javascript tampermonkey


【解决方案1】:

一个更好的方法是授予unsafeWindow

// @grant       unsafeWindow

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

function test()
{
    console.log("test");
}

但也可以通过unsafeWindow 使其在控制台中可用:

if(!unsafeWindow.test)
{
    unsafeWindow.test = test;
}

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

【讨论】:

  • 在 TamperMonkey 中,脚本在与页面自身的 Javascript 相同的上下文中运行。因此unsafeWindowwindow 是完全相同的对象。它的存在只是为了与真正的用户脚本(由浏览器处理的脚本)兼容。
【解决方案2】:

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

window.updateGUI = function () {...}

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

var myFunctions = window.myFunctions = {};
myFunctions.updateGUI = function () {...};

之后您可以直接拨打myFunctions.updateGUI();

【讨论】:

    【解决方案3】:

    我找到了我的问题的答案,但 Nit 的答案更胜一筹。如果有人需要,我仍然会发布我的。

    您可以通过将函数添加到脚本元素并将其附加到正文来将函数添加到全局范围

    var scriptElem = document.createElement('script');
    scriptElem.innerHTML = 'function updateGui() { /* stuff */ }';
    document.body.appendChild(scriptElem);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 2020-02-25
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多