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

[油猴脚本开发指南]本地文件访问权限与外部开发

[复制链接]
  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6764

    积分

    管理员

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

    积分
    6764

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

    发表于 2021-12-30 19:17:23 | 显示全部楼层 | 阅读模式

    前文

    请注意,如果你准备打开本地文件访问权限,请注意风险性

    如果你不了解此功能的危害性,无法权衡利弊,则不建议开启

    关于安全性可以大概参考

    [油猴脚本开发指南]沙盒机制的前世今生(课外篇,可不看)

    https://bbs.tampermonkey.net.cn/thread-182-1-1.html

    关于浏览器选择问题

    该情况通常应用于脚本开发

    根据我的个人设置,火狐浏览器是无法打开本地文件权限的

    所以本文强制使用Chrome浏览器

    如果你使用其他浏览器我是没法提供任何意见的

    Chrome浏览器如何开启文件访问权限

    图片.png

    点击右侧三个点-》更多工具-》拓展程序-》详情

    图片.png

    打开允许访问文件网址

    图片.png

    打开Tampermonkey文件访问地址

    打开设置-》高级

    图片.png

    进入安全项-》允许脚本访问本地文件,选择所有本地文件

    图片.png

    你就可以获取到本地文件啦~

    关于如何读取本地txt

    注意,如果读取本地txt文件,则一定是file:///开头,是三个斜杠!

    我们可以使用GM函数,获取

    // ==UserScript==
    //...
    // @resource txt1 file:///D:/2.txt
    // @grant GM_getResourceText
    // ==/UserScript==
    
    const txt = GM_getResourceText('txt1');
    console.log(txt);

    这种情况是在脚本一次性初始化的时候获取txt

    如果你想动态获取txt则可以

    通过gm_xhr函数进行获取,文本可能出现乱码,所以我们可以使用二进制下载,然后进行编码转换等操作

    注意一个问题:gm_xhr函数访问本地文件的时候疑似会忽略我们正常post或get的一些参数以及属性。

    如overrideMimeType之类的字段都会被自动抛弃

    
    GM_xmlhttpRequest({
        method: "get",
        responseType:'arraybuffer',
        url: "file:///C://Users/30832/Downloads/2.txt",
        headers: { "Content-Type": "text/json,charset=utf-8" },
        onload: async function(r) {
            console.log('-----------------------')
            console.log(r)
            console.log("responseText=",await ab2str(r.response));
        }
    });
    
    //ArrayBuffer转字符串
    function ab2str(u,f) {
        return new Promise((resolve,reject)=>{
            var b = new Blob([u]);
            var r = new FileReader();
            r.readAsText(b, 'utf-8');
    
            r.onload = ()=>{
                resolve(r.result)
            }
        })
    
    }

    我们也可以通过require函数来外部引用代码

    这个时候我们可以使用vscode编译器等

    这个时候代码是完全同步并且无缓存的,但是关于UserScript头是必须要在脚本编辑器里来进行写的

    // ==UserScript==
    // @name         New Userscript
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @description  try to take over the world!
    // @author       You
    // @match        https://bbs.tampermonkey.net.cn/*
    // @icon         https://www.google.com/s2/favicons?domain=baidu.com
    // @require      file:///C:/CloudMusic/1.txt
    // ==/UserScript==

    关于编辑器问题的一点碎碎念

    关于require引用也算经常跟大家重复这些问题

    如果你不require file地址

    而去require 网络js地址,包括127.0.0.1等局域网地址

    依然是存在缓存的,也就是说即使你设置经常刷新,依然会刷新多次才能同步一次你的代码

    所以油猴目前常见的方案也就只有这样来进行外部通信,使用外部编辑器来进行书写代码

    我也尝试了使用tamperdav

    但是效果不显著

    https://bbs.tampermonkey.net.cn/forum.php?mod=viewthread&tid=1078&highlight=tamper

    其同步速度是极其缓慢的,完全不适用于开发

    而且会莫名其妙的同时激活ftp软件、putty软件等乱七八糟的软件

    所以不推荐使用tamperdav

    tampermonkey对外部编辑器支持还是蛮差的,所以更推荐使用scriptcat做外部编辑器支持

    另外重复一遍

    如果你require代码则相当于

    function (){

    require的代码块

    你的代码块

    }

    如果碰到问题请先回忆一下这个

    结语

    那么这节课我们就学习了如何使用外部编辑器来进行开发

    撒花~
    [/u]

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

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

    该用户从未签到

    3

    主题

    15

    回帖

    89

    积分

    初级工程师

    积分
    89
    发表于 2023-12-1 13:16:13 | 显示全部楼层
    我写的构建工具似乎可以解决外部编辑器的问题, 理论上可以使用任何外部编辑器来写油猴脚本, 比如vscode vim, 能利用上 copilot 插件, 还可以热重载脚本, 自动生成油猴脚本的元数据

    https://github.com/LinLin00000000/usbuild
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    3 天前
  • 签到天数: 532 天

    [LV.9]以坛为家II

    148

    主题

    420

    回帖

    1215

    积分

    版主

    积分
    1215

    油中2周年生态建设者

    发表于 2021-12-30 19:38:27 | 显示全部楼层
    nb                              
    I don't hate programming but the fucking world.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4197

    回帖

    4061

    积分

    管理员

    积分
    4061

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

    发表于 2021-12-30 19:45:11 | 显示全部楼层
    为什么不用脚本猫vscode
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

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

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6764

    积分

    管理员

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

    积分
    6764

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

    发表于 2021-12-30 20:12:37 | 显示全部楼层
    王一之 发表于 2021-12-30 19:45
    为什么不用脚本猫vscode

    其同步速度是极其缓慢的,完全不适用于开发

    而且会莫名其妙的同时激活ftp软件、putty软件等乱七八糟的软件

    所以不推荐使用tamperdav

    tampermonkey对外部编辑器支持还是蛮差的,所以更推荐使用scriptcat做外部编辑器支持
    哥哥不看!
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4197

    回帖

    4061

    积分

    管理员

    积分
    4061

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

    发表于 2021-12-30 22:18:50 | 显示全部楼层
    李恒道 发表于 2021-12-30 20:12
    其同步速度是极其缓慢的,完全不适用于开发

    而且会莫名其妙的同时激活ftp软件、putty软件等乱七八糟的软 ...

    az。。。。
    tampermonkey对外部编辑器支持还是蛮差的,所以更推荐使用scriptcat做外部编辑器支持
    这段刚好略过
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

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

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6764

    积分

    管理员

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

    积分
    6764

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

    发表于 2021-12-31 01:18:50 | 显示全部楼层
    王一之 发表于 2021-12-30 22:18
    az。。。。
    tampermonkey对外部编辑器支持还是蛮差的,所以更推荐使用scriptcat做外部编辑器支持
    这段刚 ...

    没关系,因为是你看完我才加的
    哈哈哈哈哈
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

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

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-1-28 11:21
  • 签到天数: 59 天

    [LV.5]常住居民I

    19

    主题

    102

    回帖

    124

    积分

    中级工程师

    积分
    124
    发表于 2023-1-20 16:44:12 | 显示全部楼层
    gegeniubi  xxl
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    回帖

    2

    积分

    助理工程师

    积分
    2
    发表于 2023-2-7 20:18:10 | 显示全部楼层
    火狐浏览器 如何读取本地文件?我不清楚如何设置权限,请大神指点。
    @require: couldn't load @require from URL 'file:///home/ubuntu/Desktop/demo/es.js': Access to this or all local files is forbidden!
    回复

    使用道具 举报

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

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6764

    积分

    管理员

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

    积分
    6764

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

    发表于 2023-2-7 20:37:49 | 显示全部楼层
    lisirgo 发表于 2023-2-7 20:18
    火狐浏览器 如何读取本地文件?我不清楚如何设置权限,请大神指点。
    @require: couldn't load @require fro ...

    我也没找到
    文章里写了的
    你也可以再努努力
    找到发个贴~

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

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

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-16 15:40
  • 签到天数: 276 天

    [LV.8]以坛为家I

    115

    主题

    460

    回帖

    997

    积分

    荣誉开发者

    积分
    997

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

    发表于 2023-4-8 09:56:07 | 显示全部楼层
    lisirgo 发表于 2023-2-7 20:18
    火狐浏览器 如何读取本地文件?我不清楚如何设置权限,请大神指点。
    @require: couldn't load @require fro ...

    哥哥开启允许访问本地文件应该就可以了
    https://bbs.tampermonkey.net.cn/thread-4374-1-1.html   
    接脚本定制
    I frequently record, because want to leave something.
    回复

    使用道具 举报

    发表回复

    本版积分规则

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