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

在Greasy Fork发布脚本并使用脚本猫的库

[复制链接]

该用户从未签到

3

主题

4

回帖

17

积分

助理工程师

积分
17

油中3周年挑战者 lv2

发表于 2024-1-9 21:13:04 | 显示全部楼层 | 阅读模式

本帖最后由 firetree 于 2024-1-9 22:07 编辑

本帖最后由 firetree 于 2024-1-9 21:14 编辑

太长不看:用ElementGetter可以这么require,可以发Greasy Fork

// @require      https://scriptcat.org/lib/513/2.0.0/ElementGetter.js#sha256=KbLWud5OMbbXZHRoU/GLVgvIgeosObRYkDEbE/YanRU=

我们写脚本的时候经常用到cxxjackie大佬的ElementGetter这个好用的库。轻轻松松就可以实现元素的操作,这减少了无用的重复代码,对于针对播放器这类通用组件进行操作的脚本来说,可以说是如虎添翼。

这就是你脚本猫的库啊,异步操作元素真的是轻轻又松松啊,你们Greasy Fork有没有这么好的库啊?

可是众所周知,Greasy Fork对外部脚本限制严格。脚本猫的外部库,Greasy Fork根本不让require。这怎么办呢?Greasy Fork上有一个盗版的Element Getter,但是版本落后,而且用不可靠的盗版也不是个办法。

我在翻看Greasy Fork 对外部脚本的政策的时候,突然发现了这么一条:

附有子资源完整性散列的脚本
允许使用 Tampermonkey 格式 下的有子资源完整性的 @require 和@resource URL。

我立刻点开这两个链接,学习了一番。可是当我试图自己构造一个这样的URL,却发现总是出现SRI Error。计算散列对我这样的不研究密码学的人来说,有点麻烦,而且我也不确切地知道SRI的散列值是用什么格式表示的。

好在,我在MDN发现了这么一个工具:SRI Hash Generator。我发现,给出URL,就可以给你一个支持SRI的HTML代码,真的太方便了!

可是,当我输入ElementGetter的地址,却发现出现了CORS的错误,原来脚本猫不支持跨源访问。这个工具也不支持你复制代码来计算散列,只支持URL。

好在,这个时候我有一个办法。那就是我在Deta Cloud上部署的“私人”CORS代理。使用CORS代理计算了散列以后,我终于得到了下面这一串代码:

<script src="https://corsanywhere-1-b2405373.deta.app/https://scriptcat.org/lib/513/2.0.0/ElementGetter.js" integrity="sha256-KbLWud5OMbbXZHRoU/GLVgvIgeosObRYkDEbE/YanRU=" crossorigin="anonymous"></script>

立刻取其中的关键部分,构建了下面这个URL:

https://scriptcat.org/lib/513/2.0.0/ElementGetter.js#sha256-KbLWud5OMbbXZHRoU/GLVgvIgeosObRYkDEbE/YanRU=

可是我发现,竟然还是不让提交!

难道Greasy Fork的规则并不是允许SRI,只是支持带有SRI的允许其他规则的URL?好在我测试一番发现把-改成=就行了。说好的“Tampermonkey 格式”呢?

所以,最后我得到了这个URL。

https://scriptcat.org/lib/513/2.0.0/ElementGetter.js#sha256=KbLWud5OMbbXZHRoU/GLVgvIgeosObRYkDEbE/YanRU=

顺利提交。

如果要用别的什么库,恐怕还得这么来,希望有懂SRI的老哥能给出更方便的计算SRI的方法,否则就得搞到一个CORS代理了(属于是走大弯路)。

谁赢了?谁输了?Greasy Fork的严格的规则中一个后来加入的较为宽松的部分被成功“攻破”了,但是着却代表它更加包容,可以防止开发者为了脚本猫的库跑到脚本猫去;脚本猫的库被Greasy Fork上的开发者使用了,可是这也代表着它的库有机会走向更广阔的社区。

  • TA的每日心情
    无聊
    2025-1-31 20:04
  • 签到天数: 195 天

    [LV.7]常住居民III

    752

    主题

    6591

    回帖

    7258

    积分

    管理员

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

    积分
    7258

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

    发表于 2024-1-9 21:42:25 | 显示全部楼层
    @王一之 竟然我们没想到这个
    要不要开个专题讨论一下

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

    入驻了爱发电https://afdian.com/a/lihengdao666
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-11-21 13:37
  • 签到天数: 213 天

    [LV.7]常住居民III

    307

    主题

    4442

    回帖

    4264

    积分

    管理员

    积分
    4264

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

    发表于 2024-1-9 21:46:18 | 显示全部楼层
    李恒道 发表于 2024-1-9 21:42
    @王一之 竟然我们没想到这个
    要不要开个专题讨论一下

    讨论什么呢?这个机制确实可以
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    894

    回帖

    1391

    积分

    荣誉开发者

    积分
    1391

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2024-1-9 22:30:41 | 显示全部楼层
    你贴的这个链接:https://developer.mozilla.org/zh ... bresource_Integrity
    里面不是给出了一个方案吗?用他的代码构建一个bat文件,然后将库下载到本地,再拖放到这个文件上执行就能得到hash值了,我试了一下,把代码里的384改成256,就能得到跟你一模一样的结果。

    关于我为什么没有发布至GressyFork
    一方面是我个人对GF社区的反感,另一方面是懒对于转载/盗版行为我本身并不反对,也有人向我询问过,我都是许可了的,后来确实也有萌生过自己发布的想法,但目前GF上已有数个转载版本(善用搜索:https://greasyfork.org/zh-CN/scripts/libraries?q=ElementGetter),我再发一个更像是在添乱,因此作罢。
    回复

    使用道具 举报

    该用户从未签到

    3

    主题

    4

    回帖

    17

    积分

    助理工程师

    积分
    17

    油中3周年挑战者 lv2

    发表于 2024-1-9 23:10:10 | 显示全部楼层
    cxxjackie 发表于 2024-1-9 22:30
    你贴的这个链接:https://developer.mozilla.org/zh-CN/docs/Web/Security/Subresource_Integrity
    里面不是 ...

    抱歉,曾经我也见过其中一些比较新的转载版本,但是我忘了,然后搜索了几次,因为搜索词略有错误而只搜到了一个版本落后的转载版本【捂脸】
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-30 00:00
  • 签到天数: 122 天

    [LV.7]常住居民III

    29

    主题

    601

    回帖

    543

    积分

    专家

    积分
    543

    油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2024-1-10 10:31:50 | 显示全部楼层
    广阔个社区个屁,那讨论区天天像造反派斗地主一样的
    回复

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    3

    回帖

    5

    积分

    助理工程师

    积分
    5
    发表于 4 天前 | 显示全部楼层
    感谢分享
    回复

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    3

    回帖

    5

    积分

    助理工程师

    积分
    5
    发表于 4 天前 | 显示全部楼层

    本帖最后由 清华紫光 于 2025-4-15 18:54 编辑

    本帖最后由 清华紫光 于 2025-4-15 18:53 编辑

    本帖最后由 清华紫光 于 2025-4-15 18:42 编辑

    本帖最后由 清华紫光 于 2025-4-15 18:41 编辑

    亲测验证成功😀

    让Greasy Fork的require用上了自有库,不过中间走了不少弯路,这里给后来者一些经验。生成SRI散列bat原代码,使用bat前必须先安装OpenSSL软件库包,并配置OpenSSL环境变量。由于该bat代码过于简陋,这里贴上我改进过的一键生成SRI散列工具bat代码,打开bat后拖入文件回车,即可生成SRI散列,并到保存当前目录的sha.txt里。打开sha.txt,删除回车符把这段字符串加到脚本猫js库地址后面即可。

    sha.txt文件示例

    #sha256
    =KbLWud5OMbbXZHRoU/GLVgvIgeosObRYkDEbE/YanRU=

    自有库例子

    // @require      https://scriptcat.org/lib/513/2.0.0/ElementGetter.js#sha256=KbLWud5OMbbXZHRoU/GLVgvIgeosObRYkDEbE/YanRU=

    一键生成SRI散列工具bat代码

    @echo off
    title   一键生成SRI散列工具1.2  %date%
    color 1F
    mode con cols=70 lines=20
    
    :main
    cls
    echo\
    echo  使用条件:
    echo  1.安装OpenSSL软件库包,具体方法请百度;
    echo  2.安装后配置OpenSSL环境变量;
    echo  3.测试:按WIN+R,输入cmd打开命令行,输入openssl version,不报错;
    echo\
    
    set bits=sha256
    echo 算法:%bits%
    if exist %bits%.txt del %bits%.txt
    echo\
    set file=0
    set /p file=   请拖入文件,回车执行:
    if "%file%" == "0" (
        echo\
        echo 操作无效,文件不存在
        ping -n 3 127.1>nul
            goto main
        )
    echo #%bits%=> sha.txt
    openssl dgst -%bits% -binary %file% | openssl base64 -A >> sha.txt
    set /p a= < sha.txt
    
    echo\
    echo 生成SRI散列完成,已保存到sha.txt
    echo 按任意键返回.....
    pause>nul
    goto main
    
    已有1人评分好评 油猫币 理由
    王一之 + 1 + 4 赞一个!

    查看全部评分 总评分:好评 +1  油猫币 +4 

    回复

    使用道具 举报

    发表回复

    本版积分规则

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