一文搞懂油猴(篡改猴)脚本中window和unsafeWindow的关系
先看第一段代码:特点是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)
})```
一文搞懂油猴(篡改猴)脚本中window和unsafeWindow的关系的更多相关文章
- 三文搞懂学会Docker容器技术(中)
接着上面一篇:三文搞懂学会Docker容器技术(上) 6,Docker容器 6.1 创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --na ...
- 三文搞懂学会Docker容器技术(下)
接着上面一篇:三文搞懂学会Docker容器技术(上) 三文搞懂学会Docker容器技术(中) 7,Docker容器目录挂载 7.1 简介 容器目录挂载: 我们可以在创建容器的时候,将宿主机的目录与容器 ...
- 一文搞懂RAM、ROM、SDRAM、DRAM、DDR、flash等存储介质
一文搞懂RAM.ROM.SDRAM.DRAM.DDR.flash等存储介质 存储介质基本分类:ROM和RAM RAM:随机访问存储器(Random Access Memory),易失性.是与CPU直接 ...
- 基础篇|一文搞懂RNN(循环神经网络)
基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...
- 一文搞懂 Prometheus 的直方图
原文链接:一文搞懂 Prometheus 的直方图 Prometheus 中提供了四种指标类型(参考:Prometheus 的指标类型),其中直方图(Histogram)和摘要(Summary)是最复 ...
- Web端即时通讯基础知识补课:一文搞懂跨域的所有问题!
本文原作者: Wizey,作者博客:http://wenshixin.gitee.io,即时通讯网收录时有改动,感谢原作者的无私分享. 1.引言 典型的Web端即时通讯技术应用场景,主要有以下两种形式 ...
- 一文搞懂vim复制粘贴
转载自本人独立博客https://liushiming.cn/2020/01/18/copy-and-paste-in-vim/ 概述 复制粘贴是文本编辑最常用的功能,但是在vim中复制粘贴还是有点麻 ...
- 一文搞懂所有Java集合面试题
Java集合 刚刚经历过秋招,看了大量的面经,顺便将常见的Java集合常考知识点总结了一下,并根据被问到的频率大致做了一个标注.一颗星表示知识点需要了解,被问到的频率不高,面试时起码能说个差不多.两颗 ...
- 一文搞懂 js 中的各种 for 循环的不同之处
一文搞懂 js 中的各种 for 循环的不同之处 See the Pen for...in vs for...of by xgqfrms (@xgqfrms) on CodePen. for &quo ...
- 一文搞懂如何使用Node.js进行TCP网络通信
摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...
随机推荐
- API 风格选对了,文档写好了,项目就成功了一半!
在前后端开发中,API文档和API风格设计是提高开发效率.减少沟通成本.确保系统稳定性的关键环节.一个清晰.易用的API文档可以帮助前端开发者快速理解接口的使用方法,而完善的测试则能尽早发现潜在问题, ...
- 前端(一)-Html
1.网页基本信息 <!DOCTYPE html> 浏览器使用的规范 <head> 网页头 <body> 主体部分 <meta> 元数据 meta的nam ...
- 第五章 非对称加密算法--DH--RSA
13.1.DH 非对称算法的基石 仅能用于密钥分配,不能用于加解密数据,一般加密数据用AES 密钥长度:512~1024中的64的整数倍 双方各有自己的密钥对 13.2.RSA 最经典的非对称加密算法 ...
- Mysql死锁问题如何排查和解决
Mysql 查询是否存在锁表有多种方式,这里只介绍一种最常用的. 1.查看正在进行中的事务SELECT * FROM information_schema.INNODB_TRX2.查看正在锁的事务SE ...
- java多线程---总结(2)
ThreadPoolExecutor 官方API解释线程池的好处: (1)通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销. (2)对线程进行一些维护和管理,比如定时开始,周期执行,并发数控 ...
- 解决安装python各种包速度慢问题
# 改用清华镜像库 pip install ******* -i https://pypi.tuna.tsinghua.edu.cn/simple
- jdk 5.0 新增的foreach循环(用于遍历集合、数组)
使用 foreach 循环遍历集合元素 Java 5.0 提供了 foreach 循环迭代访问 Collection和数组. 遍历操作不需获取Collection或数组的长度,无需使用索引访问元素 ...
- 华为交换机VLAN配置
一.静态VLAN划分 1.查看接口信息 # 查看接口信息 display interfaces # 查看接口状态和配置的简要信息 display interfaces brief 2.静态VLAN划分 ...
- GPU虚拟化技术简介:实现高性能图形处理的灵活部署
本文分享自天翼云开发者社区<GPU虚拟化技术简介:实现高性能图形处理的灵活部署>,作者:z****n GPU虚拟化技术是一项重要的创新,通过将物理GPU划分为多个虚拟GPU,实现多用户共享 ...
- vim技巧:设置编码格式,批量注释(待续其他功能)
navicate导出的sql由于是win平台所有模式都是dos所以上传到服务器需要更改模式类型为unix :set ff 查看当前文本的模式类型,一般为dos,unixdos 代表windows转出类 ...