如何从浏览器的JS控制台控制Tampermonkey脚本的功能

How to control a Tampermonkey script's function from the browser's JS console?

本文关键字:控制 Tampermonkey 脚本 功能 控制台 JS 浏览器      更新时间:2023-09-26

我用这段代码写了一个 Greasemonkey/Tampermonkey 脚本:

var on = true;
function doSomething(){
   if(on){
      //do stuff
   }
}
setInterval(doSomething,1000);


通常该功能处于活动状态,但在少数情况下,我想从浏览器中的 javascript 控制台禁用它。
我不想在网页上添加额外的切换按钮。

我怎样才能做到这一点?在控制台中输入 on = true 不起作用,因为on"未定义"。

Greasemonkey 和 Tampermonkey 在与目标页面不同的范围内运行,也可以使用沙箱。

目标页面和 JS 控制台看不到脚本作用域中定义的变量和函数,但脚本可以将内容注入目标页的作用域。

因此,将 on 变量放在目标页面范围内,然后可以从控制台控制该函数。 在这种情况下,请使用unsafeWindow文档来执行此操作

一个完整的 Greasemonkey 和 Tampermonkey 脚本是:

// ==UserScript==
// @name     _Allow console control of Tampermonkey function
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant    unsafeWindow
// ==/UserScript==
unsafeWindow.on = true;
function doSomething () {
    if (unsafeWindow.on){
        //do stuff
    }
}
setInterval (doSomething, 1000);

在控制台中,省略unsafeWindow 。 也就是说,您将使用:

on = false;
// OR
on = true;

以停止和启动该脚本的操作。


请注意,在 Chrome 中,脚本必须在 Tampermonkey 中运行,而不是在 Chrome 的原生用户脚本仿真中运行。