先看第一段代码:特点是grant none
// ==UserScript==
// @name test
// @match https://1.1.1.1/
// @grant none
// ==/UserScript==
(function(win){
console.log(window)
console.log(win)
})(unsafeWindow);
执行结果:Uncaught (in promise) ReferenceError: unsafeWindow is not defined
因为根本没有声明unsafeWindow,所以报错.把unsafeWindow替换为window后,执行正常如下图.
再看第2段代码:特点是grant unsafeWindow
// ==UserScript==
// @name test
// @match https://1.1.1.1/
// @grant unsafeWindow
// ==/UserScript==
(function(win){
console.log(window)
console.log(win)
console.log(window===win)
})(unsafeWindow);
执行结果如下:
可见,改为沙盒模式后,第一行输出的是油猴(篡改猴)扩展提供的"假窗口",第二行输出的才是真正的window,第三行则说明了二者根本不是一回事.
另外基于目前使用的油猴(篡改猴)v4.19.0补充3个小知识点:
1,GM_info无需授权就能使用;
2,把第二段代码中的@grant unsafeWindow换为任意的@grant GM_api,比如GM_log,GM_addStyle,...效果不变
3,关于标签页的GM_api应该这么授权:
// @grant GM.getTab
// @grant GM.saveTab
// @grant GM.getTabs
标签:unsafeWindow,log,grant,win,window,搞懂,GM
From: https://www.cnblogs.com/zqdlly/p/17636472.html