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

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

[复制链接]
  • TA的每日心情
    开心
    前天 00:00
  • 签到天数: 49 天

    [LV.5]常住居民I

    350

    主题

    3064

    帖子

    3077

    积分

    荣誉开发者

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

    Rank: 10Rank: 10Rank: 10

    积分
    3077

    猫咪币纪念章国庆纪念章中秋纪念章荣誉开发者家财万贯

    发表于 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]

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
  • TA的每日心情
    擦汗
    2022-8-1 10:48
  • 签到天数: 94 天

    [LV.6]常住居民II

    142

    主题

    521

    帖子

    842

    积分

    版主

    Rank: 8Rank: 8

    积分
    842

    猫咪币纪念章三好学生活跃会员热心会员突出贡献中秋纪念章国庆纪念章宣传达人推广达人

    发表于 2021-12-30 19:38:27 | 显示全部楼层
    nb                              
    bilibili:陈公子的话   公众号:陈公子的话
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    5 小时前
  • 签到天数: 64 天

    [LV.6]常住居民II

    150

    主题

    1976

    帖子

    2119

    积分

    管理员

    Rank: 10Rank: 10Rank: 10

    积分
    2119

    猫咪币纪念章热心会员活跃会员突出贡献三好学生中秋纪念章国庆纪念章管理员家财万贯

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

    使用道具 举报

  • TA的每日心情
    开心
    前天 00:00
  • 签到天数: 49 天

    [LV.5]常住居民I

    350

    主题

    3064

    帖子

    3077

    积分

    荣誉开发者

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

    Rank: 10Rank: 10Rank: 10

    积分
    3077

    猫咪币纪念章国庆纪念章中秋纪念章荣誉开发者家财万贯

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

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

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

    所以不推荐使用tamperdav

    tampermonkey对外部编辑器支持还是蛮差的,所以更推荐使用scriptcat做外部编辑器支持
    哥哥不看!
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    5 小时前
  • 签到天数: 64 天

    [LV.6]常住居民II

    150

    主题

    1976

    帖子

    2119

    积分

    管理员

    Rank: 10Rank: 10Rank: 10

    积分
    2119

    猫咪币纪念章热心会员活跃会员突出贡献三好学生中秋纪念章国庆纪念章管理员家财万贯

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

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

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

    使用道具 举报

  • TA的每日心情
    开心
    前天 00:00
  • 签到天数: 49 天

    [LV.5]常住居民I

    350

    主题

    3064

    帖子

    3077

    积分

    荣誉开发者

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

    Rank: 10Rank: 10Rank: 10

    积分
    3077

    猫咪币纪念章国庆纪念章中秋纪念章荣誉开发者家财万贯

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

    没关系,因为是你看完我才加的
    哈哈哈哈哈
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    发表回复

    本版积分规则

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