一文搞懂油猴(篡改猴)脚本中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通信部份进行实践记录. 本文分享自 ...
随机推荐
- UOS系统mysql服务安装
UOS系统mysql服务安装 背景 1.安装环境:kvm虚拟机 2.运行环境:uos server-1060e 3.架构:x86 4.安装mysql版本:mysql-5.7 1.安装准备 # Mysq ...
- TestProject 使用汇总
1. 截图 from addons.screenshot_utils import ScreenshotUtils step_output = driver.addons().execute( Scr ...
- GRPC-JAVA
近一年来一直在用公司内wiki进行技术调研以及记录,后期有时间将逐步迁移至博客园 参考资料: https://github.com/grpc/grpc-java https://www.cnblogs ...
- Solution -「NOI 2017」「洛谷 P3822」整数
\(\mathscr{Description}\) Link. 初始有整数 \(x=0\), 给出 \(n\) 次操作, 每次操作为 \(x\gets x+a\cdot2^b\) 或询问 \( ...
- Solution -「CF 1290F」Making Shapes
\(\mathscr{Description}\) 给定平面向量集 \(\newcommand{\vct}[1]{\boldsymbol{#1}}\{\vct v_n\}\),求从 \((0,0) ...
- CDS标准视图:应收账龄表 I_ARJrnlEntrItmAgingGrid
视图名称:应收账龄表 I_ARJrnlEntrItmAgingGrid 视图类型:参数 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'IARJEITMAGGRID' ...
- biancheng-Linux教程
目录http://c.biancheng.net/linux_tutorial/ 1Linux简介2Linux安装3Linux文件和目录管理4Linux打包(归档)和压缩5Vim文本编辑器6Linux ...
- 【java提高】---细则(3)
HashSet 与TreeSet和LinkedHashSet的区别 今天项目开发,需要通过两个条件去查询数据库数据,同时只要满足一个条件就可以取出这个对象.所以通过取出的数据肯定会有重复,所以要去掉重 ...
- Java Spring Cloud Nacos 配置修改不生效的解决方法
一.引言 在微服务架构中,配置管理是一个关键部分.Nacos作为一个动态服务发现.配置管理和服务管理平台,广泛应用于Java Spring Cloud项目中.然而,有时在修改Nacos配置后,这些更改 ...
- 混元API的加密机制与原生集成实战
今天,我们将重点讨论在对接混元大模型时需要特别关注的几个要点.首先,最为关键的一点是,混元大模型的加密方式相比于其他大模型更为复杂和严密.在对接过程中,我们通常避免使用混元官方提供的SDK进行集成,主 ...