油猴入门使用
油猴入门使用
https://blog.csdn.net/weixin_42067967/article/details/105863853
油猴是一个浏览器拓展,用户能添加脚本代码来操作对应网页。
用户脚本标题
-
// ==UserScript==
-
// @name test
-
// @namespace http://tampermonkey.net
-
// @version 0.1
-
// @description try to take over the world!
-
// @author You
-
// @match https://www.baidu.com/*
-
// @include https://www.zhihu.com/*
-
// @exclude https://www.zhihu.com
-
// @require https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js
-
// @grant unsafeWindow
-
// @grant GM_xmlhttpRequest
脚本的描述信息、需要引用的文件、接口等均可在此设定
@name : 脚本的名称
@namespace:脚本的名称空间
@version:脚本版本
@auth:作者
@description:描述,简短的描述该脚本的功能,利于后续管理
@include、match:该脚本运行于此页面,可以明确指定一个url或使用通配符*来代替路径中的部分字符
@exclude:排除url,即使已经@include、@match也会排除
@require:脚本运行前加载并执行的js文件
@grant:用于引进GM_*函数,unsafeWindow,这个对象可以获取到网站中的一些变量和 JavaScript 函数
以上是常用的脚本标题,想了解更多请查看Tampermonkey 文档
应用程序接口
GM_setValue(name, value):
设置“name”的值到storage中
GM_getValue(name, defaultValue):
从storage中获取“name”的值,没有则返回默认值
GM_deleteValue(name):
从storage中删掉“name”
GM_addValueChangeListener(name, function(name, old_value, new_value, remote) {}):
监听storage中“name”值的改变,并返回侦听器的id,remote为true表示在另一个标签页中修改的,false则表示在当前页面修改的。
GM_removeValueChangeListener(listener_id):
删除对应id的侦听器
GM_openInTab(url, options), GM_openInTab(url, loadInBackground):
打开标签页,options对象有以下属性:
active :新标签页获得焦点
insert:新标签页在当前页面之后添加
setParent:当新标签页关闭后,焦点给回当前页面
incognito: 新标签页在隐身模式或私有模式窗口打开
loadInBackground 可以是 Boolean 类型,如果是 true,则当前 tab 不变,如果是 false,则当前 tab 变为新打开的 tab
若只有一个参数则新标签页不会聚焦,该函数返回一个对象,有close()、监听器onclosed和closed的标记
GM_xmlhttpRequest(details):
创建一个xmlhttpRequest,可以实现跨域请求,属性:
method:
url:
headers:
onload :
......
例:
-
GM_xmlhttpRequest({
-
url:"",
-
method:'POST',
-
data:"",
-
onerror:function(res){
-
console.log(res);
-
},
-
onload:function(res){
-
console.log(res);
-
}
-
});
以上是部分应用程序接口,具体请查看Tampermonkey 文档
示例:(个人经验)
在开发过程中有时候会遇到标签页之间需要通信,这时GM的相关方法就起到了很好作用,可以通过它来实现标签页之间互相监听动态,这只是其中一种方法,使用可以看下面的案例:
该案例使用了GM_*来实现标签页之间通信,在百度页面打开知乎页面,知乎页面3秒后改变状态,然后监听器监听到状态改变后就关闭页面,脚本如下:
-
// ==UserScript==
-
// @name test
-
// @namespace http://tampermonkey.net
-
// @version 0.1
-
// @description 通过GM_*实现标签页间通信
-
// @author You
-
// @match https://www.baidu.com/*
-
// @match https://www.zhihu.com/*
-
// @grant unsafeWindow
-
// @grant GM_setValue
-
// @grant GM_getValue
-
// @grant GM_openInTab
-
// @grant GM_addValueChangeListener
-
// ==/UserScript==
-
-
(function() {
-
-
-
var newTap;
-
//打开新页面
-
var onpenNewTap = function (){
-
newTap = GM_openInTab("https://www.zhihu.com",{ active: true, setParent :true});
-
GM_setValue("newTapState", true);
-
};
-
//关闭页面
-
var closeNewTap = function(){
-
newTap.close();
-
};
-
//监听新标签页的状态
-
var listenNewTap = function(){
-
GM_addValueChangeListener('newTapState', function(name, old_value, new_value, remote){
-
if(new_value == false){
-
closeNewTap();
-
}
-
})
-
};
-
-
var host = window.location.host
-
if(host.indexOf("baidu") > -1){
-
onpenNewTap();
-
listenNewTap();
-
} else if(host.indexOf("zhihu") > -1){
-
setTimeout(function(){
-
GM_setValue("newTapState", false);
-
}, 3 * 1000);
-
}
-
-
})();
这里使用GM_openInTab的方法打开新的页面,当然你也可以使用window.open
注意:
通过GM存储的数据只能在同个油猴脚本下运行的脚本才能互相读取。若多个功能分脚本实现,可以在脚本标题中通过require来引入。