上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
12下一页
返回列表 发新帖

[油猴脚本开发指南]grant介绍,none与unsafeWindow

[复制链接]
  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4188

    回帖

    4055

    积分

    管理员

    积分
    4055

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2020-12-23 17:17:34 | 显示全部楼层 | 阅读模式
    本节主要内容:
    介绍一下油猴脚本的grant属性,说明none和unsafeWindow
    grant
    这个属性可用来申请GM_*函数和unsafeWindow权限.相当于放在脚本header里面告诉油猴扩展,你需要用些什么东西,然后它就会给你相应的权限.

    更加详细的列表:
    tampermonkey文档地址:https://www.tampermonkey.net/documentation.php#_grant
    tampermonkey可申请api文档地址:https://www.tampermonkey.net/documentation.php#api

    none和unsafeWindow

    简单来说:none就是直接运行在前端页面中,否则就是运行在一个沙盒环境,需要使用unsafeWindow去操作前端的元素.

    除了GM_*函数外,还有两个特殊的权限,就是noneunsafeWindow.默认的情况下,你的脚本运行在油猴给你创建的一个沙盒环境下,这个沙河环境无法访问到前端的页面,也就无法操作前端的一些元素等.如果在页面最前方声明:"//@grant none",那么油猴就会将你的脚本直接放在前端的上下文中执行,这是的脚本上下文(window)就是前端的上下文.但是这样的话就无法使用GM_*等函数,无法与油猴交互,使用一些更强的功能.

    所以一般写脚本的时候是使用unsafeWindow与前端交互,而不使用"//@grant none",这样就可以使用grant去申请油猴的一些更强的函数功能.这时候的脚本上下文(window)是沙盒的上下文,而不是前端的上下文.

    在沙盒环境中,有一些window的操作也无法处理,需要使用grant来获取,例如:"// @grant window.onurlchange"(TamperMonkey文档中的)
    1. // ==UserScript==
    2. ...
    3. // @grant window.onurlchange
    4. // ==/UserScript==

    5. if (window.onurlchange === null) {
    6.     // feature is supported
    7.     window.addEventListener('urlchange', (info) => ...);
    8. }
    复制代码

    这样的作法是为了避免恶意网页可以直接的使用GM_*函数,也可以避免被网页检测到GM_*插件的存在
    GM文档内容:
    unsafeWindow绕过Greasemonkey的安全模型,该模型的存在是为了确保恶意网页不能以这样的方式修改对象,从而使用户脚本(比在网页中运行的普通JavaScript具有更高的权限执行)执行其作者或用户不想做的事情。

    更多详细内容请看:https://bbs.tampermonkey.net.cn/thread-182-1-1.html

    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。

    该用户从未签到

    0

    主题

    1

    回帖

    13

    积分

    助理工程师

    积分
    13
    发表于 2021-6-10 17:00:21 | 显示全部楼层
    请问上面那段代码是干啥用的呀?
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    回帖

    13

    积分

    助理工程师

    积分
    13
    发表于 2021-7-1 21:30:55 | 显示全部楼层
    非常好,感谢
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5959

    回帖

    6758

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6758

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2021-7-1 21:49:40 | 显示全部楼层

    哥哥加油!
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    回帖

    2

    积分

    助理工程师

    积分
    2
    发表于 2022-5-15 16:47:37 | 显示全部楼层
    小白看不懂,就暂且先往下学吧
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-30 10:43
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    17

    回帖

    18

    积分

    助理工程师

    积分
    18

    新人报道

    发表于 2022-6-2 08:43:21 | 显示全部楼层
    unsafeWindow 看了半天还是不懂是什么原理 可以再详细解释一下嘛 他和window的区别是什么呢?
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4188

    回帖

    4055

    积分

    管理员

    积分
    4055

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-6-2 09:35:45 | 显示全部楼层
    挖掘机小王子 发表于 2022-6-2 08:43
    unsafeWindow 看了半天还是不懂是什么原理 可以再详细解释一下嘛 他和window的区别是什么呢? ...

    运行在沙盒模式的时候,window是无法操作页面元素的,沙盒中的window是沙盒的window,如果你想操作页面上的元素就得使用unsafeWindow
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-30 10:43
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    17

    回帖

    18

    积分

    助理工程师

    积分
    18

    新人报道

    发表于 2022-6-2 10:17:07 | 显示全部楼层
    王一之 发表于 2022-6-2 09:35
    运行在沙盒模式的时候,window是无法操作页面元素的,沙盒中的window是沙盒的window,如果你想操作页面上 ...

    如果我想操作页面上的window是也需要用unsafeWindow吧 因为我想重写window下面的某些函数 但是不用unsafeWindow发现修改了没有用处 例如setInterval函数的修改,我需要放到unsafeWindow中修改才行 是不是因为我之前修改的是沙盒模式下的window 所以不起效果的原因
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4188

    回帖

    4055

    积分

    管理员

    积分
    4055

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-6-2 10:28:10 | 显示全部楼层
    挖掘机小王子 发表于 2022-6-2 10:17
    如果我想操作页面上的window是也需要用unsafeWindow吧 因为我想重写window下面的某些函数 但是不用unsafe ...

    是的,沙盒模式中 unsafeWindow全等于页面的window
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-30 10:43
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    17

    回帖

    18

    积分

    助理工程师

    积分
    18

    新人报道

    发表于 2022-6-2 10:29:45 | 显示全部楼层
    王一之 发表于 2022-6-2 10:28
    是的,沙盒模式中 unsafeWindow全等于页面的window

    哥哥NB!
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表