找回密码
 立即注册
快捷导航

[Html/Css/JS] 油猴脚本 - @grant属性

[复制链接]
庶民 2023-6-13 13:06:03 | 显示全部楼层
本帖最后由 庶民 于 2023-6-13 13:07 编辑

@grant属性

可申请GM_*函数,none值 和 unsafeWindow权限;

更加详细的列表:

值为none的话,脚本就相当于直接运行在前端页面中(缺点:不能使用油猴提供的 GM_* 函数),反之就是脚本运行在一个沙盒环境,在这个沙盒中需要使用unsafeWindow去操作前端的元素;

默认的情况下,你的脚本运行在油猴给你创建的一个沙盒环境下,这个沙河环境无法访问到前端的页面,也就无法操作前端的一些元素等;

如果在页面最前方声明:"//@grant none",那么油猴就会将你的脚本直接放在前端的上下文中执行,这时的脚本上下文(window)就是前端的上下文,但是这样的话就无法使用GM_*等函数,无法与油猴交互,使用一些更强的功能.

所以一般写脚本的时候是使用 //@grant unsafeWindow 与前端交互,而不使用 //@grant none ,这样就可以使用grant去申请油猴的一些更强的函数功能.这时候的脚本上下文(window)是沙盒的上下文,而不是前端的上下文,而在沙盒环境中操作页面的window上下文时,就需要使用 unsafeWindow 代替 window;

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

// ==UserScript==
...
// @grant unsafeWindow
// @grant window.onurlchange
// ==/UserScript==

if (window.onurlchange === null) {
    // feature is supported
    window.addEventListener('urlchange', (info) => ...);
}

这样的作法是为了避免恶意网页可以直接的使用 GM_* 函数,也可以避免被网页检测到 GM_* 插件的存在

GM文档内容:

unsafeWindow绕过Greasemonkey的安全模型,该模型的存在是为了确保恶意网页不能以这样的方式修改对象,从而使用户脚本(比在网页中运行的普通JavaScript具有更高的权限执行)执行其作者或用户不想做的事情。

回复

使用道具 举报

主题

0

回帖

97

积分

渐入佳境

奥特曼 2024-12-14 01:48:42 | 显示全部楼层

// @grant none

// @grant none 是一个元数据注解(Metadata Block),它告诉脚本管理器(如Tampermonkey、Greasemonkey)这个脚本不使用任何特权API或函数,而是仅运行在标准的网页环境中。这意味着:

影响和含义

  1. 沙箱环境
    • 没有@grant指令或使用@grant none,脚本将在与网页相同的沙箱环境中运行。这意味着脚本无法访问某些特权功能,如GM_xmlhttpRequestGM_setValue等。
  2. 权限
    • 脚本只能使用标准的JavaScript API和DOM操作,没有额外的权限或安全限制。
  3. 兼容性
    • 由于脚本不依赖于特定的脚本管理器提供的API,它在不同脚本管理器或浏览器环境中的兼容性会更高。
  4. 安全性
    • 由于脚本没有额外的权限,安全性相对较高,因为它不能执行可能影响用户隐私或安全的操作。

使用场景

  • 简单脚本:对于不需要额外权限的简单脚本,如简单的DOM操作、样式注入或基础JavaScript功能,@grant none是合适的选择。
  • 跨平台兼容性:如果你希望脚本能在尽可能多的浏览器和脚本管理器中运行,@grant none可以提高兼容性。
  • 学习或测试:在学习用户脚本编写时,@grant none可以让你专注于基本的JavaScript和DOM操作。

注意事项

  • 功能限制:由于脚本运行在标准环境中,某些强大的功能(如跨域请求、存储数据等)将不可用。
  • 性能:在某些情况下,使用@grant指令可能会提供更好的性能,因为脚本可以利用脚本管理器提供的优化。
  • API限制:不能使用脚本管理器提供的API,如GM_getValueGM_setValue等。

如果你需要使用脚本管理器提供的特权API,你需要移除@grant none或指定具体的API,例如@grant GM_xmlhttpRequest。这样,脚本就可以访问到这些特权功能,但同时也要注意使用这些功能时对用户隐私和安全的影响。

   
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
温馨提示

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

Archiver|手机版|小黑屋|DLSite

GMT+8, 2025-1-18 13:15

Powered by Discuz! X3.5 and PHP8

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