在TM的文档中有这样一个API
GM_addValueChangeListener
GM_addValueChangeListener(name, function(name, old_value, new_value, remote) {})
Adds a change listener to the storage and returns the listener ID. 'name' is the name of the observed variable. The 'remote' argument of the callback function shows whether this value was modified from the instance of another tab (true) or within this script instance (false). Therefore this functionality can be used by scripts of different browser tabs to communicate with each other.
这个API的作用就是可以对存储在GM中的变量进行监听,当值变化时,可以触发一个函数,
name是要监听的变量名称, 字符串类型, name指向的变量必须是基本数据类型,如果是js中的引用类型object是无法触发监听函数的
监听函数,第一个参数是变量名称, 第二个是旧值,第三个是新值, 第四个是表示,值的变化是在当前浏览器窗口还是其他脚本触发的, 其他窗口为true 其他脚本触发的为false
具体用法需要搭配GM_setValue 函数,对变量进行赋值
具体用法如下
代码语言:javascript复制// ==UserScript==
// @name allOpen
// @namespace https://fizzz.blog.csdn.net/
// @version 0.1
// @description try to take over the world!
// @author Fizz
// @grant GM_setValue
// @grant GM_addValueChangeListener
// ==/UserScript==
(function () {
'use strict';
GM_setValue('globalStatu', 'initial') // open close
GM_addValueChangeListener('globalStatu', function(name, old_value, new_value, remote) {
console.log(name, old_value, new_value, remote)
window.kk="https://fizzz.blog.csdn.net/";
window.close();
})
GM_setValue('globalStatu', 'close')
})
使用GM_addValueChangeListener 可以很简单地编写跨浏览器窗口的脚本. 就是如此简单 强大