liij的博客(博客标题)

liij的博客(博客子标题)

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

先看第一段代码:特点是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

以下贴一段测试这些api的代码

// ==UserScript==
// @name Test GM tabs
// @match *://example.com/
// @match *://example.org/
// @grant GM.getTab
// @grant GM.saveTab
// @grant GM.getTabs
// ==/UserScript==

unsafeWindow.GM_getTab = GM.getTab;
unsafeWindow.GM_saveTab = GM.saveTab;
unsafeWindow.GM_getTabs = GM.getTabs;

GM.saveTab({href:location.href});
  console.log("tabs:", await GM.getTabs());
GM_getTabs().then(function(obj) {
  console.log(obj)
})```
posted on 2023-08-16 23:11  liij  阅读(923)  评论(0)    收藏  举报

联系方式:n1rk@qq.com 非诚勿扰