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

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

[复制链接]

216

主题

1775

帖子

2322

积分

管理员

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

Rank: 9Rank: 9Rank: 9

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

混的人。

138

主题

461

帖子

893

积分

版主

Rank: 7Rank: 7Rank: 7

积分
893

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

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

使用道具 举报

107

主题

1198

帖子

1466

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1466

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

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

使用道具 举报

216

主题

1775

帖子

2322

积分

管理员

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

Rank: 9Rank: 9Rank: 9

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

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

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

所以不推荐使用tamperdav

tampermonkey对外部编辑器支持还是蛮差的,所以更推荐使用scriptcat做外部编辑器支持
哥哥不看!
混的人。
回复

使用道具 举报

107

主题

1198

帖子

1466

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1466

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

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

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

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

使用道具 举报

216

主题

1775

帖子

2322

积分

管理员

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

Rank: 9Rank: 9Rank: 9

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

没关系,因为是你看完我才加的
哈哈哈哈哈
混的人。
回复

使用道具 举报

发表回复

本版积分规则

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